FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Praktische Informatik

SE3 - Richtungsunabhängigkeit (Logik für Funktional)

SE3 - Richtungsunabhängigkeit (Logik für Funktional) 2011-02-07 15:03
Anonymer User
Hi

Der begriff Richtungsunabhängigkeit kommt in SE3-FP häufig vor, wenns um Prolog geht (Prolog in Scheme/Racket). Was genau man sich darunter vorstellen kann steht jedoch nirgends so genau, im Internet findet sich auch nichts.

Meine Frage: Was genau kann ich mir darunter vorstellen?
Eine knappe Antwort genügt vollkommen :)

RE: SE3 - Richtungsunabhängigkeit (Logik für Funktional) 2011-02-07 15:24
Anonymer User
SE3 ist bei mir schon sehr lange her, aber ich glaube damit war folgendes gemeint (ohne Gewähr!)

Bei einem herkömmlichen Programmierparadigma (z.B. OO) hast du immer eine Abarbeitungs/Flussrichtung, in der Regel von oben nach unten. Beispielsweise:

int a = 1;
int b = 2;
a = 2;
a = a+b;
print(a);

Aufgrund der Flussrichtung wird auf der Konsole 4 ausgegeben. Zuerst wird a mit 1 initialisiert, dann wird b mit 2 initialisiert, danach wird a mit 2 "überschrieben" und danach nochmal mit der Summe aus a und b.

In der Logikprogrammierung ist das anders. Ich weiss die Syntax absolut nicht mehr, aber du hast ja Prädikate wie:
Vater(Paul, Herbert)
Mutter(Renate, Herbert)

Soll bedeuten Paul ist der Vater von Herbert und Renate ist die Mutter von Herbert. Es geht auch daraus hervor, dass Paul und Renate Herberts Eltern sind etc. . Dabei ist es egal, ob man das von oben nach unten oder sonstwie auswertet, wichtig sind die Relationen zwischen den Personen.

Ich hoffe das war es und ist verständlich erkärt. :P

RE: SE3 - Richtungsunabhängigkeit (Logik für Funktional) 2011-02-07 15:35
doodles
Richtungsunabhängigkeit bedeutet, dass ein bestimmtes Prädikat bei verschiedenen Eingaben ein Problem in die eine oder in die andere Richtung löst. Es ist nicht eindeutig definiert, was eingabe und was ausgabe ist.

Wenn du zum Beispiel ein richtungsunabhängiges Prädikat zum addieren hast, kann das Prädikat sowohl Zahlen zusammen addieren, als auch für eine Zahl alle möglichen Rechenaufgaben genereiren, die diese Zahl ergeben.

Oder ein anderes Beispiel: Du hast eine Liste und möchtest prüfen, ob eine bestimmte Liste eine Teilliste davon ist

L: [a, b, c, d]
S: [b, c]

in prolog hättest du nun ein prädikat, was definiert, wann eine liste teilliste von einer anderen ist.
teilliste(L, S) würde also zu true ausgewertet.

Wenn das Prädikat richtungsunabhängig ist, kannst du aber auch teilliste unterspezifiziert aufrufen. Du kannst L nicht mit reingeben, dann berechnet das Prädikat alle Listen, von denen S eine Teilliste ist… oder du gibst S nicht mit an, dann berechnet das Prädikat alle Teillisten von L. Oder du gibst L und S nicht mit an, dann berechnet Prolog alle möglichen Kombinationen von Listen, wobei die eine Liste Teilliste der anderen ist.

In einer imperativen Sprache hättest du wahrscheinlich eine Funktion für die eine richtung und eins für die andere.

RE: SE3 - Richtungsunabhängigkeit (Logik für Funktional) 2011-02-07 16:47
Anonymer User
Erstmal Vielen Dank für die Antworten :)

Für mich machen beide Beschreibungen Sinn und beide passen auch damit zusammen, dass die Richtungsabhängigkeit bei der Benutzung von Funktionalen Ausdrücken verloren geht.
Ich weiß jetzt nur nicht, welche denn mit Richtungsunabhängigkeit gemeint ist :) Irgendwie tendiere ich eher zu doodles Erklärung, weil das Mischen der Zeilenreihenfolge auch in strikt funktionaler Umgebung gegeben ist (da Variablen nicht überschrieben werden dürfen.)

RE: SE3 - Richtungsunabhängigkeit (Logik für Funktional) 2011-02-07 17:03
Anonymer User
Erstmal Vielen Dank für die Antworten :)

Für mich machen beide Beschreibungen Sinn und beide passen auch damit zusammen, dass die Richtungsabhängigkeit bei der Benutzung von Funktionalen Ausdrücken verloren geht.
Ich weiß jetzt nur nicht, welche denn mit Richtungsunabhängigkeit gemeint ist :) Irgendwie tendiere ich eher zu doodles Erklärung, weil das Mischen der Zeilenreihenfolge auch in strikt funktionaler Umgebung gegeben ist (da Variablen nicht überschrieben werden dürfen.)

Achtung, es geht um logische und nicht funktionale Programmierung. Funktionale Programmierung ist afaik auch nicht Richtungsunabhängig! Eine Funktion hat ihre "gerichtete Aufgabe" und die erfüllt sie. Bei der Logikprogrammierung definierst du eine richtungslose "Umgebung" bei der es nur auf die Relationen zwischen den Prädikaten ankommt.

Ich denke die Erklärungen überschneiden sich irgendwo. In der imperativen Programmierung gibst du deiner Funktion eine Richtung vor die sich einhält (egal wie generisch sie geschrieben ist). In der Logikprogrammierung erstellst du eine Umgebung die für sich noch keinen "Kontrollfluss" und keine "Abarbeitungsrichtung" hat, erst mit der Anfrage legst du fest, was eigentlich getan werden soll.

RE: SE3 - Richtungsunabhängigkeit (Logik für Funktional) 2011-02-07 17:08
Anonymer User
Achtung, es geht um logische und nicht funktionale Programmierung. Funktionale Programmierung ist afaik auch nicht Richtungsunabhängig! Eine Funktion hat ihre "gerichtete Aufgabe" und die erfüllt sie. Bei der Logikprogrammierung definierst du eine richtungslose "Umgebung" bei der es nur auf die Relationen zwischen den Prädikaten ankommt.

Oh sorry, ich hatte mich da etwas verlesen.

weil das Mischen der Zeilenreihenfolge auch in strikt funktionaler Umgebung gegeben ist (da Variablen nicht überschrieben werden dürfen.)

Variablen dürfen nicht überschrieben werden, das ist richtig. Aber es ist der Umgebung egal welches Prädikat in welcher Zeile steht.

RE: SE3 - Richtungsunabhängigkeit (Logik für Funktional) 2011-02-07 18:13
Anonymer User
Im Skript S. 662, ist die "Relation likes" als Beispiel für Richtungsunabhängigkeit gegeben.

RE: SE3 - Richtungsunabhängigkeit (Logik für Funktional) 2011-02-07 19:07
doodles
Das was ich geschrieben habe ist die Folge dessen, was der anonyme Benutzer vor mir geschrieben hat. Insofern haengt das, wie schon erwaehnt, zusammen.

RE: SE3 - Richtungsunabhängigkeit (Logik für Funktional) 2011-02-07 21:41
Anonymer User
Alles klar, vielen Dank nochmal :) Und allen SE3-Schreibern morgen wünsch ich viel Erfolg!

RE: SE3 - Richtungsunabhängigkeit (Logik für Funktional) 2011-02-08 08:43
theorinix
Im Skript S. 662, ist die "Relation likes" als Beispiel für Richtungsunabhängigkeit gegeben.

Hier scheint Richtungsunabhängikeit mit der Symmetrie der Relation gleichgesetzt zu werden(?).
Die Erklärung des zweiten Postings sagt mir mehr zu. Ich würde den Veranstalter mündlich fragen!!