質問は、最初のリストの特定の要素(X
)をx
のような別の要素(Y
)に置き換えて最終的にそれを格納する述語を作成することでした最後の引数に新しいリストを追加します。明らかに私のベースケース(?)に間違っていることは分かっていますが、私はそれを理解できないようです。このコードをトレースすると、通常の状態になりますが、最初のリストが空の場合は、匿名変数の追加が開始されます。私はPrologを初めて使っています。ループに入るのをやめる方法がわかりません
replace([], _, _, []).
replace([H|T], X, Y, N):-
H = X,
append(N, [Y], NL),
replace(T, X, Y, NL).
replace([H|T], X, Y, N):-
H \= X,
append(N, [H], NL),
replace(T, X, Y, NL).
をあなたは間違った方法を追加...それは 'アペンド(NLでなければなりません、[Y]、N) 'と' append(NL、[H]、N) 'と呼ばれる。しかし、それはまだ非効率的であり、さらにあなたは 'append/3'を全く必要としません。 –
私は確かにこれすべてを行う効率的な方法があるかもしれないと考えました。しかし、私は動作しないものを考えているようです。 – Boomer
私はそれを 'append([Y]、NL、N)'と 'append([H]、NL、N)'に変更しました。今は動作しますが、私はもっと効率的な方法が何であるかを知りたいです。 – Boomer