zip-функция в Prolog

Я новичок в Prolog, и мое назначение требует от нас реализации функции, как описано ниже:

Напишите предикат Prolog zip (L1, L2, L3) , который будет истинным, если список L3 получен путем сжатия (т. Е. Перетасовки "или чередования") элементов списков L1 и L2 . Обновление: списки L1 и L2 могут иметь разную длину. Например, когда вы закончите, вы должны получить следующее поведение:

?- zip([1,2],[a,b],[1,a,2,b]).
true.
?- zip([1,2],[a,b],X).
X = [1, 2, a, b] ;
X = [1, 2, a, b] ;
X = [1, a, 2, b] ;
X = [1, a, b, 2] ;
X = [a, 1, 2, b] ;
X = [a, 1, b, 2] ;
X = [a, b, 1, 2] ;
X = [a, b, 1, 2] ;
false.
?- zip([1,2],[a,b],[1,2,a,b]).
true.
?- zip(X,[a,b],[1,a,2,b]).
X = [1,2]
true.
?- zip([1,2],X,[1,a,2,b]).
X = [a,b]
true.

Я подумываю создать список, содержащий элементы из L1 и L2 , а затем сравнить список с L3 . Но я Я не знаком с синтаксисом и циклами в Prol ог.

5
задан Gilles 'SO- stop being evil' 12 January 2013 в 16:34
поделиться