Prolog 序言列表-复制头

Prolog 序言列表-复制头,prolog,clpfd,prolog-lists,Prolog,Clpfd,Prolog Lists,我试图从一个术语列表中列出两个连续的术语。所以,如果L1和L2是列表,并且L2在一行中包含L1中的每个元素两次,则echo应该返回True。 没有clpfd 我想让echo接受 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,

我试图从一个术语列表中列出两个连续的术语。所以,如果L1和L2是列表,并且L2在一行中包含L1中的每个元素两次,则echo应该返回True。 没有clpfd

我想让echo接受

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).
我得到一个关于terms=>

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

我猜你不想使用CLPFD

没有CLPFD:

echo([], []).
echo([X|Xs], [X,X|Ys]):-
  echo(Xs, Ys).

我猜你不想使用CLPFD

没有CLPFD:

echo([], []).
echo([X|Xs], [X,X|Ys]):-
  echo(Xs, Ys).

您需要预先注意,这是在使用
clpfd
。Prolog和带有clpfd的Prolog之间有很大区别。答案是否需要
clpfd
?你在问题中没有明确地说。我这样问是因为没有
clpfd
,这要容易得多。CLP(FD)(如
#=
)只用于对整数进行推理。因此“域错误”。修复没有clpfd,对不起!您需要预先注意,这是在使用
clpfd
。Prolog和带有clpfd的Prolog之间有很大区别。答案是否需要
clpfd
?你在问题中没有明确地说。我这样问是因为没有
clpfd
,这要容易得多。CLP(FD)(如
#=
)只用于对整数进行推理。因此“域错误”。修复没有clpfd,对不起!在我解决问题时,你一定要回答(在我解决问题时,你一定要回答(