Ich versuche, dies zu erreichen:Elemente in einer verschachtelten Liste
OldList
gegeben, jedes Element ersetzen, wenn das Element ein Ziel erfüllt (oldNew)
; Wenn nicht, ersetzen Sie den Artikel nicht.
Geben Sie eine NewList
mit ersetzten Elementen zurück, die dieselbe Struktur (d. H. Dieselbe Verschachtelung) wie OldList
aufweisen.
Ich bekomme es zu arbeiten (siehe meinen Code) für den Sonderfall OldList = [a, b, c]
, aber ich würde gerne ein Prädikat schreiben, das über die Listenlängen und verschachtelte Listen, z. auch für OldList = [a, [b, c, [d, e]]]
.
Vielen Dank im Voraus! /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:
Verstanden mit beliebigen Liste Längen zu arbeiten; aber ich weiß immer noch nicht, wie man mit verschachtelten Listen umgeht.
replace2(OldList, NewList):-
[H | T] = OldList,
oldNew(H, NewHead),
NewList = [NewHead | T].
replace2(OldList, NewList):-
[H | T] = OldList,
replace2(T, NewTail),
NewList = [H | NewTail].
Schöne Verwendung von 'apply' und' yall'. –
Danke CapelliC, das hat mein Problem gelöst. – JCR