【问题标题】:infinite loop caused by append SWi prolog由附加 SWi prolog 引起的无限循环
【发布时间】:2013-04-09 04:57:02
【问题描述】:

我正在尝试向最初为空的列表添加值的代码。 使用 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). 

【问题讨论】:

  • 你从哪里得到一个无限循环?我看不到!

标签: prolog append


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 是的,谢谢。我不需要使用附加。我正在使用 getcardvalue() 来获取与卡关联的值。一旦我实现了,我只需要在需要比较或查看值的地方调用相同的函数。成功了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 2014-05-09
  • 2012-04-02
  • 1970-01-01
相关资源
最近更新 更多