append SWi prolog导致的无限循环

append SWi prolog导致的无限循环,prolog,append,Prolog,Append,我正在尝试一个代码,它向一个最初为空的列表中添加一个值。 当使用append时,程序将继续执行无限循环或堆栈外循环 我正在使用SWI Prolog,我是Prolog新手 getcardvalueList([],[_]). getcardvalueList([H|Ts],[_]):- getcardvalue(H,Val), append([_],[Val],Vl), getcardvalueList(Ts,Vl). append([X|Y],Z,[X|W]) :- appen

我正在尝试一个代码,它向一个最初为空的列表中添加一个值。 当使用append时,程序将继续执行无限循环或堆栈外循环

我正在使用SWI Prolog,我是Prolog新手

getcardvalueList([],[_]).
getcardvalueList([H|Ts],[_]):-
   getcardvalue(H,Val),
   append([_],[Val],Vl),
   getcardvalueList(Ts,Vl).

append([X|Y],Z,[X|W]) :- append(Y,Z,W).
append([],X,X). 

您以一种奇怪的方式使用列表,我不确定该代码的用途

不管怎样,我认为你正在尝试编写一个代码,所以这可以做到

getcardvalueList(Cards, Values) :-
   maplist(getcardvalue, Cards, Values).
如果您尝试执行此操作,我可以显示“修订”代码:

getcardvalueList([],[]).
getcardvalueList([Card|Cards],[Val|Vals]):-
  getcardvalue(Card,Val),
  getcardvalueList(Cards,Vals).
不需要追加,列表构造是通过head参数中的模式完成的。
请注意,您应该避免重新定义库谓词,如/3。

是的,谢谢。我不需要使用append。我使用getcardvalue()获取与卡关联的值。一旦我实现了它,我只需要调用相同的函数,在这里我需要比较或查看值。这就是问题所在,这里有无限循环吗?我看不出来!