FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Liste splitten

Liste splitten 2002-01-05 16:53
Anonymer User
In einer Übungsaufgabe (Aufgabenblatt 4, 3.b) sollten wir eine Liste in 2 Teile teilen. Es sind zwei verschiedene Möglichkeiten aufgeschrieben, aber nur eine ist auch in der Musterlösung.

Ich würde nun gerne wissen, wie die andere Lösung funktioniert.

Für alle, die die Aufgabe nicht vorliegen haben:
split([f,d,e,a,e,b,a,c,d],L1,L2).
L1 = f,d,e,a,e
L2 = b,a,c,d

Re: Liste splitten 2002-01-05 21:06
Slater
hallo, ich hab mich mal einige zeit damit beschäftigt,
meine idee ist, das man von der gegebenen liste bei jedem schritt jeweils ein element vorne und hinten wegnimmt und daraus die beiden teillisten baut,
richtungsunabhängigkeit kann man dabei aber vergessen [img]http://images.rapidforum.com/images/i25.gif[/img]

%endeweg(alteliste,neueliste)
%alteliste darf nicht leer sein,
%neueliste ist die alte ohne das letzte element

endeweg([_],[]).
endeweg([K|R1],[K|R2]):-endeweg(R1,R2).

%split(alteliste,linkeliste,rechteliste)
%alteliste wird in linkeliste und rechteliste geteilt,
%die rechteliste ist maximal um 1 kleiner

split([],[],[]).
split([K],[K],[]).
split([K|Rest],[K|Links],Rechts):-
length(Rest,LRest),LRest>0,last(End,Rest),
endeweg(Rest,Rest1),split(Rest1,Links,Rechts1),
append(Rechts1,[End],Rechts).

Re: Liste splitten 2002-01-05 21:42
Anonymer User
Hey, das funktioniert ja! Vielen Dank!

Ich versuch erstmal das nachzuvollziehen und dann kann ja morgen nix mehr schief gehen ….

Nur wenn man das umgekehrt macht (also Liste zusammenfügen, aus der 2. und 3.) bekommt man zwar die richtige Lösung, aber anschließend terminiert die Suche bei mir nicht. Kann man da eventuell nen Cut einfügen oder so, damit das perfekt wird?

PS: Warum kann ich mich im Forum nicht Anmelden? Bekomm immer nach dem Eingeben meiner Daten die Meldung: Seite nicht gefunden. Liegt das vielleicht an meinen zu hohen Sicherheitseinstellungen im IE oder ist irgendwas an der Seite nicht in Ordnung?

Re: Liste splitten 2002-01-05 22:31
Slater
ich denk mal das ein cut, was immer das auch so genau ist, nicht als schönes prolog gilt, und dem prädikat nicht die eigenschaft richtungsunabhängigkeit im eigentlichen sinne hinzufügt, da hatte man bei den übungsaufgaben mit der umrechnung peano in normale zahlen auch pech gehabt,

wie irgendwas in diesem forum funktioniert, wüsste ich auch gerne, bin froh, wenn ich mein posting nach zig mal aktualisieren endlich sehe

Re: Liste splitten 2002-01-06 10:06
Wollemenzel
% mylast(Liste, Letztes Element, Liste ohne letztes Element).

mylast([E],E,[]).
mylast([K|RL],E,[K|ERL]):- mylast(RL,E,ERL).

% mittelsplit(Liste, TeilListe1, TeilListe2).

mittelsplit([],[],[]).
mittelsplit([E],[E],[]).
mittelsplit([K|ListeohneKopf],[K|L1],L2mitEnde) :- mylast(ListeohneKopf,LestztesElement,ListeOhneKofpundEnde),m
ittelsplit(ListeOhneKopfundEnde,L1,L2),mylast(L2mitEnde,Letz
tesElement,L2).