ネストされたリスト内の1つのまたは複数の要素を交換してください:OldList
考える私はこれを達成しようとしています
、アイテムがゴール(oldNew)
を満たした場合に任意の項目を置き換えます。そうでない場合は、商品を交換しないでください。
NewList
を、同じ構造(つまり同じネスト)を持つ置換済みアイテムとともに返します(OldList
)。
特殊ケースOldList = [a, b, c]
については私のコードを参照してください。しかし、リストの長さとネストされたリストの間で一般化する述語を書きたいと思います。 OldList = [a, [b, c, [d, e]]]
も同様です。
ありがとうございます! /JC
oldNew(fruit, banana).
oldNew(car, ferrari).
replace(OldList, NewList):-
[X1, X2, X3] = OldList,
(oldNew(X1, Y1); Y1 = X1),
(oldNew(X2, Y2); Y2 = X2),
(oldNew(X3, Y3); Y3 = X3),
(oldNew(X1, Y1); oldNew(X2, Y2), oldNew(X3, Y3)),
NewList = [Y1, Y2, Y3].
EDIT1:
は、それが任意のリストの長さで動作するようになりました。しかし、私はまだネストされたリストを処理する方法を知らない。
replace2(OldList, NewList):-
[H | T] = OldList,
oldNew(H, NewHead),
NewList = [NewHead | T].
replace2(OldList, NewList):-
[H | T] = OldList,
replace2(T, NewTail),
NewList = [H | NewTail].
'apply'と' yall'をうまく使います。 –
CapelliCありがとう、これは私の問題を解決しました。 – JCR