0

我正在尝试向最初为空的列表添加值的代码。使用追加时,程序不断进入无限循环或出栈。

我正在使用 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). 
4

1 回答 1

0

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

无论如何,我认为您正在尝试编写maplist,所以可以这样做

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

如果您尝试这样做,我可以显示“修改后的”代码:

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

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

于 2013-04-09T05:59:57.213 回答