誰かがこれらのルールのエラーを見つけるのを手伝ってくれる?
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! チュートリアルに他のリソースがあります。
追加を使用して行うことができます。
concatenate(List1, List2, Result):-
append(List1, List2, Result).
お役に立てれば。
これは、2つのリストルール間の連結です。
concat([],L2,L2). concat([Head|Tail],L2,[Head|L3]) :- concat(Tail,L2,L3).