由附加SWi序言引起的无限循环

时间:2013-04-09 04:57:03

标签: prolog 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). 

1 个答案:

答案 0 :(得分:0)

你以奇怪的方式使用列表,我不确定该代码的用途。

无论如何,我认为您正在尝试对maplist进行编码,因此可以这样做

getcardvalueList(Cards, Values) :-
   maplist(getcardvalue, Cards, Values).

如果你试图这样做,我可以显示“修改过的”代码:

getcardvalueList([],[]).
getcardvalueList([Card|Cards],[Val|Vals]):-
  getcardvalue(Card,Val),
  getcardvalueList(Cards,Vals).

无需追加,列表构造是通过head'arguguments中的模式完成的。 请注意,您应该避免重新定义库谓词,例如append / 3。