我正在尝试将代码添加到最初为空的列表中的代码。 当使用追加时,程序会继续进入无限循环或堆栈外。
我正在使用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).
答案 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。