有人可以幫助查找此規則中的錯誤嗎?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