Я новичок в 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 ог.