Prolog- Hilfe für Listenprädikate gesucht!!

britta84

Cadet
Mitglied seit
06.12.2005
Beiträge
8
Renomée
0
Standort
Hiltown (unfreiwillig, nur für's Studium)
Hallo,

brauche etwas Hilfe bei diesen tollen Listenprädikaten( reverse, delete, replace etc)....
Kann mir jemand von euch sagen, wie ein Prädikat aussieht, das ein beliebiges Element einer Liste löscht bzw. auswechselt?*noahnung*
Wäre für schnelle Hilfe sehr dankbar!!;D
 
Code:
// 1. Parameter: Quellliste
// 2. Parameter: zu löschender Wert
// 3. Parameter: Zielliste
delete([], E, []).
delete([E|T], E, T1) :- delete(T, E, T1).
delete([H|T], E, [H|T1]) :- H \== E, delete(T, E, T1).
Code:
// 1. Parameter: Quellliste
// 2. Parameter: zu ersetzender Wert
// 3. Parameter: einzusetzender Wert
// 4. Parameter: Zielliste
replace([], E, F, []).
replace([E|T], E, F, [F|T1]) :- replace(T, E, F, T1).
replace([H|T], E, F, [H|T1]) :- H \== E, replace(T, E, F, T1).
Alle Angaben ohne Gewähr (habs nicht getestet).
 
So,
an dieser Stelle die Bestätigung, dass das Ganze funktioniert (allerdings war ich beim dritten Prädikat etwas begriffsstutzig). Musste noch etwas herumbasteln. Das Ergebnis sieht dann so aus:


%Prädikat zum beliebigen Löschen

delete(Loeschelement,[Loeschelement|NeueListe],NeueListe).

delete(Loeschelement,[Kopf|Rumpf],[Kopf|NeuerRumpf]) :-
delete(Loeschelement,Rumpf,NeuerRumpf).

/*
Beispielanfragen:

?- delete(b,[a,b,c,d],X).

X = [a, c, d]

Yes
?- delete(a,[a,b,c,d],X).

X = [b, c, d]

Yes
?- delete(d,[a,b,c,d],X).

X = [a, b, c]

Danke für den Support nochmal! :)
 
Keine Ursache. :)

Stimmt, der Vergleich H \== E ist überflüssig.
 
Zurück
Oben Unten