Списки Пролога - Дублирующая голова

Я пытаюсь составить список из двух последовательных терминов из списка терминов. Поэтому echo должен возвращать True, если L1 и L2 являются списками, а L2 содержит каждый элемент в L1 дважды подряд. Без clpfd.

Я хочу, чтобы эхо приняло...

echo([x,1,[b]], L).  

и вернуться...

L = [x,x,1,1,[b],[b]].

Это работает с...

echo([2,1],[2,2,1,1]).
true.

Это то, что я до сих пор...

echo([],[]).
echo([X|XS], [Y,Z|YZS]) :-
    X #= Y,
    Y #= Z,
    echo(XS, YZS).

Я получаю сообщение об ошибке в отношении условий =>

Domain error: `clpfd_expression' expected, found `x'

1 ответ

Решение

Я думаю, вы не хотите использовать CLPFD.

Без CLPFD:

echo([], []).
echo([X|Xs], [X,X|Ys]):-
  echo(Xs, Ys).
Другие вопросы по тегам