2010-11-18 32 views
0

質問は単純です...なぜこれは機能しませんか?プロローグ、再帰関数、および関数の引数による戻り値

replace([l|[r|[r|[l|R]]]], Result) :- append([f,f],R,Result). 

replace([HEAD|TAIL], Result) :- replace(TAIL, Y), append(HEAD,Y,Result). 

?- replace([l,r,r,l,r,r],X).

戻り

X = [f, f, r, r] .

しかし

?- replace([r,l,r,r,l,r,r],X).

01を与えます

false

なぜ、X = [r, f, f, r, r] .

助けてください。


PS。私はまだ英語を学んでいますが、時々私は愚かな間違いをしています。私は最善を尽くして、英語で質問と回答を書いていますが、間違いがあった場合に私の投稿を編集するととてもうれしいです。私は約束します、あなたの努力は無駄にならないでしょう。

答えて

2

append(HEAD、Y、Result)ではなく、append([HEAD]、Y、Result)が必要です。 HEADはoitselfのリストではありません。

+0

うわー...ありがとう..今それはとても分かりやすいです:) – noisy