有人可以帮助查找此规则中的错误吗?Prolog中列表的并置
concat([], List, List).
concat([Head|[]], List, [Head|List]).
concat([Head|Tail], List, Concat) :- concat(Tail, List, C), concat(Head, C, Concat).
试图串连2只列出了失败:
| ?- concat([1,2], [4,7,0], What).
no
有人可以帮助查找此规则中的错误吗?Prolog中列表的并置
concat([], List, List).
concat([Head|[]], List, [Head|List]).
concat([Head|Tail], List, Concat) :- concat(Tail, List, C), concat(Head, C, Concat).
试图串连2只列出了失败:
| ?- concat([1,2], [4,7,0], What).
no
要解决你的代码,你意的方式,你只需要在你的最后一次通话的最后一句话,在转变Head
到[Head]
到concat/3
。问题在于你只用Head
作为第一个参数来调用谓词,这不是一个列表。
虽然,这里有几个注意事项:
[Head|[]]
相当于[Head]
这里是SWI-PL的版本,暗示你对好序言递归:
append([], List, List).
append([Head|Tail], List, [Head|Rest]) :-
append(Tail, List, Rest).
您可以在最近的帖子在这里或在Learn Prolog Now!教程中找到其他资源,如果你想学习如何使用递归正常。
它可以通过使用append完成。
concatenate(List1, List2, Result):-
append(List1, List2, Result).
希望这会有所帮助。
下面是两个列表规则之间的串联:
concat([],L2,L2). concat([Head|Tail],L2,[Head|L3]) :- concat(Tail,L2,L3).
感谢您的帮助。还有一个问题:是否有可能看到序言如何解释程序?例如,堆栈跟踪可以帮助查看问题。 – damluar 2012-02-19 12:03:32
是,输入'trace.'。您将进入跟踪模式。要离开它,请输入'notrace'。你将进入调试模式。要离开调试模式,输入'nodebug.',你将回到正常模式! – m09 2012-02-19 15:08:13
我使用gnu prolog,它适用于我。谢谢! – damluar 2012-02-19 18:10:15