2. Logik Ex

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

2. Logik Ex
Also zur Ex:

Aufgabe war (ungefähr):

Schreiben sie ein Prolog-Programm, welches in einer Liste die letzte und die erste Zahl (bzw. Argument is ja wurst) vertauscht. (Methoden von Prolog durften nicht verwendet werden)
Eigentliches “falsches!” (s.u.) Bsp:

?- tausche([1, 2, 3, 4, 5], X).

X = [2, 3, 4, 5, 1].
Yes


Eigentlich sollte es so aussehen:
X = [5, 2, 3, 4, 1].
Yes

sprich zur Übung lieber zweiteres machen!
greez und allen die noch schreiben viel Glück :wink:


wir haben exakt dasselbe geschrieben… also nicht sooo schwer


Komisch; wir mussten lediglich die Reihenfolge einer Liste umkehren. Also

?- rev([1, 2, 3, 4, 5], X).
X = [5, 4, 3, 2, 1].

Ich finds auch ein wenig ungerecht.


wow
das ist boese ja


kann mir jemand zur Übung die Lösung zur ersten Aufgabe sagen? also ?- tausche([1, 2, 3, 4, 5], X).


“die Lösung” gibt’s nicht, es gibt sicherlich mehrere Möglichkeiten, das zu programmieren.
Zerteile die Liste in erstes Element (trivial), letztes Element und die Liste der Elemente dazwischen, und bau’s dann richtig zusammen.
Für das letzte Element und die Liste der Elemente reicht ein einzelnes Prädikat, aber man kann auch zwei Prädikate dafür schreiben.


also ich hab heute den ganzen Nachmittag rumgespielt und versucht, das Programm zum laufen zu kriegen…
Hab auch was geschafft^^

tausche([Head | Tail], Erg) :- tausche(Tail, [], Head, Erg).
tausche([Head | Tail], Tail_1, Head_1, Erg) :- tausche(Tail, [Tail_1 | Head], Head_1, Erg).
tausche([Head | []], Tail_1, Head_1, [Head, Tail_1, Head_1]).

allerdings ist die Ausgabe hier:

?- tausche([1,2,3,4,5], X).

X = [5, [[[[]|2]|3]|4], 1]

würde das auch durchgehen, oder ist das nicht das gleiche? Verbesserungsvorschläge auch gerne gesehen :wink:


Ich finde es übersichtlicher, mehrere Prädikate zu verwenden:

append([],L,L).
append([H|T],L,[H|R]) :- append(T,L,R).

lastElement([E],E).
lastElement([_|T],E) :- lastElement(T,E).

tausche([H|T],R) :-
    lastElement(T,E),
    append(TN,[E],T),
    append([E|TN],[H],R).

Ausgabe:

tausche([1,2,3,4,5],R).
R = [5, 2, 3, 4, 1] .

:slight_smile:


Ich finde Prolog vollkommen unwichtig, vollkommen abstrakt, vollkommen primitiv und vollkommen nutzlos.
Prolog könnte man ehe zum Rätsel lösen nutzen, wenn man gerade nichts im Leben zu tun hat.

Das ist meine Vollkommen-Anfänger Meinung.
Verbesserung nicht vorgesehen.


Falls noch jemand kein Plan von Prolog hat (es jemanden also geht wie mir… ) kann ich folgende Seite sehr empfehlen:
http://www.kbs.uni-hannover.de/Lehre/KI1/WS02/Uebung/uebung.html

Prolog Schritt für Schritt kurz und verständlich, und das ganze als Video zum runterladen.


Sehr Wohl.
So gehet dahin und sterbet in FriedenDummheit!


[OT]

Soll das heiszen, du bist unverbesserlich und siehst das auch ein?

[/OT]


Prolog hat schon seinen Sinn. Den checkt man aber mglw. erst im Hauptstudium (oder danach :slight_smile: )


Hübsch, wie du append verwendest, um TN auf den Mittelteil der Liste zu setzen.


Ich möchte hiermit eine kleine Korrektur machen:
Meine Kritik ist nicht gegen jemanden gerichtet, sondern gegen etwas das eher mit dem System zu tun hat. Oder, besser gesagt, mit einem Grundgedanken der dem System zugrunde liegt.

Dabei möchte ich mich ausdrücklich als sehr zufrieden mit den Übungen erklären.
Ich bin ehrlich sehr sehr dankbar, dass es die Übungen gibt.
Und ich wünsche mir, dass es mehrere Leute gäbe wie mein Glolop Übungsleiter.
Vor ihm kann ich nur Respekt haben.
Danke, mein Übungsleiter!

P.S.: Ich habe mich in meinem vorherigen Post extrem ausgedrückt. Das sollte man einsehen.
Wenn ich aber solche Reaktionen wie “Dann geh und sterb in Dummheit” bekomme, dann muss ich sagen, ich wurde nicht verstanden und bin dabei nicht beleidigt.


Aha.

Die Aussage:

ist meiner Meinung nach unmissverstaendlich, sie drueckt aus, das du weißt, dass du etwas Falsch machst, dich aber dennoch nicht Einsichtig zeigen moechtest.


hallo,

wollte mal die aufgabe aus meiner Logik Ex heute posten.

implementieren sie das Prädikat unzip/3

z.B.:

? unzip([1,a,2,b,3,c],L,R).
L = [1,2,3]
R = [a,b,c]

war schwerer fand ich als liste umdrehen ;), aber für mich etwas leichter als liste tauschen.

gruß
bert


Extrem ausgedrückt heißt wie in der Kunst „nehm’s nicht wörtlich ernst, sondern betrachte eher die Form. Der Inhalt ist sekundär. Form ist wichtig.“.


Man koennte dann irgendwann auch mal wieder auf das eigentliche Thema diese Threads zurueckkommen…

z.B. dass die die heutige Aufgabenstellung der Ex war:

~ "Trennen sie eine Liste nach dem Reissverschlussverfahren in einen rechten (R) und einen linken (L) Teil auf.

Beispiel: ?- unzip([a, 1, b, 2, c, 3], L, R).
→ L = [a, b, c]
R = [1, 2, 3]"

Have fun!