PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gödel Programmiersprache


rapsli
03.05.2006, 08:51
Hallo
Ist wahrscheinlich nicht passend hier, aber ich wusste nicht, wo es sonst reinpassen würde.
Gibt es hier irgend jemand, der eine Ahnung von Gödel hat? Ich habe folgendes kleines Programm:

MODULE M1.

BASE Day, ListOfDay.

CONSTANT Nil : ListOfDay;
Monday, Tuesday, Wednesday, Thursday,
Friday, Saturday, Sunday : Day.

FUNCTION Cons : Day * ListOfDay -> ListOfDay

PREDICATE Append : ListOfDay * ListOfDay * ListOfDay;
Append3 : ListOfDay * ListOfDay * ListOfDay
* ListOfDay.

Append(Nil,x,x).

Append(Cons(u,x),y,Cons(u,z)) <- Append(x,y,z).

Append3(x,y,z,u) <- Append(x,y,w) & Append(w,z,u).



ok, soweit so gut. Nur schnalle ich nicht genau was das macht. Was ich verstehe: Cons: Day und ListOfDay gehen rein und eine ListOfDay kommt raus. Doch wie werden die zusammengesetzt?

Es würde mir schon viel helfen, wenn ich mal sehen würde, was für Anfragen man machen kann und was dann auch rauskommt, wenn man konkrete Werte einsetzt.

Hoffe es gibt hier einen Gödel Expoerten.


DarkTom
03.05.2006, 12:13
Gödel kann ich auch nicht. Wobei, deinen Code hier verstehe ich. Vorwissen in deklarativer Programmierung ist da aber Voraussetzung. Wenn du die noch nicht hast, solltest du dich auf die Suche nach geeigneten Tutorials machen.

Cons gibt es auch in anderen Sprachen (z.B. Haskell). Cons erzeugt aus eine Element und einer Liste eine neue Liste, indem es das Element an den Anfang der Liste stellt.

Eine Liste ist dabei ganz einfach so definiert: Nil ist die leere Liste. Eine nicht-leere Liste besteht aus einem Kopfelement und einer Restliste. Und das ganze wird eben zusammengehalten mit dem Listenkonstruktor Cons.

rapsli
03.05.2006, 21:02
danke schon mal für die Antwort. Das hat mir doch schon geholfen.

append ist doch aber auch wenn zwei sachen zusammengesetzt werden? wo liegt also der unterschied zu cons?

DarkTom
04.05.2006, 14:32
Append hängt zwei Listen zusammen, Cons ein Element und eine Liste.

rapsli
29.05.2006, 11:05
herzlichen Dank für die Hilfe. Was für deiner Meinung nach rauskommen, folgend Anfrage gemacht werden würde:

<- Append3(Cons(Monday, Nil), Cons(Tuesday, Nil), Cons(Wednesday, Nil), x).


Die liste ist ja: Monday, Tuesday, Wednesday, x
x wird wahrscheinlich Thursday sein, nur warum?

Danke für die Hilfe

DarkTom
29.05.2006, 18:25
Was für deiner Meinung nach rauskommen, folgend Anfrage gemacht werden würde:Warum probierst du das nicht einfach aus?

Die liste ist ja: Monday, Tuesday, Wednesday, xNein.
x wird wahrscheinlich Thursday sein, nur warum?Nein.

Das beschäftigt dich jetzt seit einem Monat und du hast immer noch nicht die einfachsten Grundlagen begriffen. Hast du dich überhaupt mal auf die Suche nach einem Tutorial gemacht? Einem Gödel-Interpreter? Ein bisschen rumprobiert?
Wenn nein, warum beschäftigst du dich übehaupt damit, wenn es dir die Mühe nicht wert ist?

Ich war mal so nett und habe dir noch einen Link rausgesucht:
http://www.cs.bris.ac.uk/~bowers/goedel.html

rapsli
30.05.2006, 00:17
Ich war mal so nett und habe dir noch einen Link rausgesucht:
http://www.cs.bris.ac.uk/~bowers/goedel.html (http://www.cs.bris.ac.uk/%7Ebowers/goedel.html)
Danke. Ein bisschen etwas habe ich schon gemacht (ich war schon des öftern auf der Homepage), die übrigens das letzte mal vor gut 10 Jahren aktualisiert wurde... Ich habe auch ein Buch über Gödel. Das Problem: Gute Tutorials gibts keine! Und das Buch ist so kompliziert geschrieben, dass man wohl Prof sein muss, um etwas zu verstehen. Ausprobieren geht nicht, da ich kein Linux System habe.

Ich habe jeztzt einfach ein anderes Beispiel genommen, wo ich auch drauskomme.

Warum ich das alles mache? ... Muss eine Arbeit über Gödel, Mercury und Prolog schreiben. Da diese Woche Abgabetermin ist, werde ich das Thema auch nicht mehr weiter erwähnen.

Gute Nacht.
Raphi

DarkTom
30.05.2006, 02:00
Du brauchst kein Linux-System. Du kannst auch den Quellcode runterladen und es dir dann selbst kompilieren. Dafür brauchst du (laut Webseite) nur SICStus Prolog und davon gibt es eine 30-Tage-Testversion, auch für Windows.

Also, das folgende ohne Garantie (wie gesagt, ich kann kein Gödel), aber stimmen sollte es schon:
PREDICATE Append : ListOfDay * ListOfDay * ListOfDay;Hier wird ein Prädikat definiert, also eine Funktion, die einen boolschen Wert (wahr/falsch) berechnet. Ich vermute mal, kleingeschriebene Bezeichner sind Variablen (bei Prolog ist es ja umgekehrt). Append wird dann wie folgt definiert:Append(Nil,x,x).
Append(Cons(u,x),y,Cons(u,z)) <- Append(x,y,z).Die erste Zeile bedeutet Append mit dem ersten Argument Nil ist dann wahr, wenn das zweite und dritte Argument gleich (unifizierbar) sind. Oder anders: Verbindest du eine leere Liste und eine beliebiege Liste, bekommst du diese beliebige Liste wieder heraus.
Die zweite Zeile sagt uns, dass Append dann wahr ist, wenn der erste und dritte Parameter nicht-leere Listen sind, die das gleiche Kopfelement haben und wenn der Rest (Schwanz) von Liste 1 zusammen mit dem zweiten Argument die Restliste von Liste 3 ergibt.
In allen anderen Fällen ist Append falsch.

Append3 macht praktisch das Gleiche mit einem Argument mehr: es ist wahr, wenn die Parameter 1, 2 und 3 zusammengehängt den vierten Parameter ergeben.

Ein Aufruf mit festen Werten und Variablen, wie du ihn angibst, versucht nun ein Belegung der Variablen zu finden, so dass das Prädikat wahr ist. Ich drösel den Aufruf mal auf:<- Append3(Cons(Monday, Nil), Cons(Tuesday, Nil), Cons(Wednesday, Nil), x).
Der erste Parameter ist die Liste mit Kopfelement Monday und leerer Restliste.
Der zweite Parameter ist die Liste mit Kopfelement Tuesday und leerer Restliste.
Der dritte Parameter ist die Liste mit Kopfelement Wednesday und leerer Restliste.
Der vierte Parameter ist eine Variable.
Das System sucht jetzt eine Belegung für diese Variable, so dass der Aufruf wahr ergibt. Ich weiss nicht, wie Gödel seine Lösungen ausgibt, aber Prolog würde dir jetzt sagen, das Prädikat ist erfüllbar und dir dann noch die Nebenbedingung, also die Belegung der Variablen angeben.

Ich könnte jetzt noch lang und breit darlegen, wie die Lösungskandidaten der Reihe nach durchgegangen werden, aber eigentlich solltest du das ja schon wissen, wenn du in dieser Woche noch präsentieren musst... Ansonsten kannst du das Prinzip auch genauso in Prolog nachvollziehen. (Da habe ich es her :)) Sehr gut auch mit einer debugbaren IDE. Ich habe hier eine alte Version vom Amzi! Development Environment, was es aber in der Form nicht mehr gibt, das wurde wohl inzwischen weiterentwickelt. Nach dem Screenshot zu urteilen, ist es eigentlich nur besser geworden. Die neue Version gibt es unter [1]. Surf ruhig auch mal auf der Amzi-Seite rum, früher hatten die gute Tutorials (für Prolog, nicht Gödel).

Und viel Glück bei deiner Arbeit. Viuelleicht magst du sie mir ja mal zeigen,wenn sie fertig ist. Entweder hier anhängen, oder, wenn du sie nicht der breiten Öffentlichkeit zugängich machen willst, per mail. Ich bin ein wenig neugierig.


[1] http://www.amzi.com/download/index.htm

rapsli
30.05.2006, 11:33
danke für die Ausführungen. Jo, wenn du interessiert bist, kann ich dir die arbeit schon schicken. Werde sie heute nochmals überarbeiten müssen, aber dann wäre ich noch so froh, wenn sich die jemand mal anschaut. Also wenn du interesse hast. Dann schicke ich sie dir mal per Mail.

Gruss
Raphi