ERLEDIGT
NEIN
NEIN
ANTWORTEN
19
19
ZUGRIFFE
1492
1492
EMPFEHLEN
-
Hallo zusammen, ich habe ein großes Problem in Prolog, ich arbeite an einem Prologprogramm, dass bei der Eingabe eines schwachen Verbs, die Vergangenheitsform ausgibt, zur Erinnerung schwache Verben; das sind Verben die ihre Stammform in der Vergangenheitsform behalten, z.B.
liebte -> lieb(te) im Gegensatz zu starken Verben, die ihren Stamm verändern, z.B.
schlafen -> schlief.
Mein Ansatz war dabei folgenderCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
%präterialform([spielen], Echo). ergibt die präterialform! map(abbauen, abbaute). map(bauen, baute). map(besiegen, besiegte). map(führen, führte). map(glauben, glaubte). map(holen, holte). map(intervenieren, intervenierte). map(jauchzen, jauchzte). map(kaufen, kaufte). map(klettern, kletterte). map(loben, lobte). map(musizieren, musizierte). map(nominieren, nominierte). map(operieren, operierte). map(planen, plante). map(richten, richtete). map(saugen, saugte). map(siegen, siegte). map(spielen, spielte). map(trauen, traute). map(unifizieren, unifizierte.) map(verschachern, verschacherte). map(wünschen, wünschte). map(X, X). präterialform([], []). präterialform([E|Rest], [AbbE|AbbRest]) :- map(E, AbbE), präterialform(Rest, AbbRest).
Hierbei müsste man jetzt z.B. folgende Eingabe machen: "präterialform([spielen], Echo)." um die entsprechende Vergangenheitsform zu erhalten. Jetzt will ich das Programm aber mit Hilfe des Prädikats "read" ein paar built-in-Prädikaten und auch atom_chars (Listenverarbeitung) soweit verändern, dass es die Vergangenheitsform selbstständig bildet, ohne wie in meinem Programm auf ein festen Bestand an Wörtern zurück zu greifen. Wüsste jemand ungefähr, wie man das am besten Anfängt? Leider drehe ich mich dabei ganz schön im Kreis.
Alles Liebe
Sabrina
-
20.04.09 22:38 #2
- Registriert seit
- Jun 2005
- Beiträge
- 7.983
Hi.
Kennst du schon das atom_concat Prädikat?
Und bitte wähle einen aussagekräftigen Titel, immer der gleiche ist ja auch langweilig...
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hi Deepthroat und vielen Dank für Deine Hilfe,
also das atom_concat Prädikat kannte ich noch nicht. Ich habe mich inzwischen darüber ein wenig informiert und verschiedene Ansätze gefunden, aber leider keinen, der dazu führt, dass eine Eingabe, z.B. "lieben" in "liebte" ausgegeben wird.
% atom_concat(?Atom1, ?Atom2, ?Atom3)
% read_term(-Term, +Options)
read_term(-Term...
Hast Du evtl. noch einen weiteren Befehl, den man dabei berücksichtigen muss?
Lieben Gruß
Sabrina
-
21.04.09 14:58 #4
- Registriert seit
- Jun 2005
- Beiträge
- 7.983
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hallo nochmal,
da ich diese atom_csoncat - Befehle bis jetzt noch nicht ans Laufen bekommen habe, kann ich leider auch keinen Code vorzeigen.
Mir ist überhaupt nicht klar, wo das Problem liegt, bzw. warum diese Prädikate nicht arbeiten.
Eigentlich soll doch eine Eingabe, z.B. "liebe" eingelesen werden und als "liebte" ausgegeben werden, ich habe als Read-Befehl
Code :1
read_term(-Term, +Options)
und wollte erst als "+Options"
Code :1
atom_concat(?Atom1, ?Atom2, ?Atom3)
versuchen, doch die Optionen scheinen begrenzt zu sein auf bestimmte Prädikate, leider steige ich insgesamt einfach nicht wirklich durch, es soll zwar ansich eine recht einfache Aufgabenstellung sein, dennoch scheine ich an irgendetwas grundlegendes nicht gedacht zu haben.
Alles Liebe
Sabrina
-
21.04.09 15:48 #6
- Registriert seit
- Jun 2005
- Beiträge
- 7.983
Du meinst du hast versucht atom_concat(...) dort anstelle der +Options einzusetzen? Das geht selbstverständlich nicht. Das funktioniert aber eigentlich nie (außer bei Prädikaten die andere Prädikate als Argument erwarten).

Wenn du read_term verwenden willst, mußt du auch Optionen angeben. Diese sind allerdings exakt festgelegt. Oder du übergibst eine leere Liste, dann kannst du allerdings auch gleich read/1 nehmen.
Warum schreibst du nicht erstmal das map/2 Prädikat so das es allgemein funktioniert? Das ist doch erstmal die Hauptarbeit. Und dann solltest du evtl. nochmal die genaue Aufgabenstellung hier reinstellen...
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hi dt

Ja ich hatte ja schon befürchtet, dass der Ansatz daneben ist. Also zur Aufgabenstellung selber, es geht wie gesagt darum ein Prädikat zu schreiben, dass von einem beliebigen schwachen Verb, die Vergangenheitsform bilden kann, also z.B. lieben -> liebte, arbeiten -> arbeitete usw. ich brauche also read Befehle, Befehle mit denen ich Listen verarbeiten kann z.B. atom_chars und weitere Buil-inPrädikate. Ich schaue mir mal dieses map/2 Prädikat genau an.
Gruß
S.
-
21.04.09 16:18 #8
- Registriert seit
- Jun 2005
- Beiträge
- 7.983
Hi.OK. Das ist einfach.
Warum? Wie kommst du darauf? Steht das so in der Aufgabenstellung?
Was für ein Prologsystem verwendest du denn eigentlich? Die interaktive Prologsitzung nimmt dir doch das read schon ab? Reicht es denn nicht wenn du "map(lieben, E)." eingibst, das dann das Prologsystem "E = liebte" ausgibt?
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hi dt,
also ich verwende die SWI Prolog Version 5.6.64 und wenn ich "map(lieben, E)" eingebe, dann kommt "Error: toplevel: undefinedprocedure map/2 (DWIM could not correct goal). Allerdings lese ich gerade erst, wie dieses map-Prädikat überhaupt funktioniert.
"ich brauche also read Befehle, Befehle mit denen ich Listen verarbeiten kann z.B. atom_chars und weitere Buil-inPrädikate."
Naja das ist nur ein Hinweis zu der Aufgabenstellung, der nicht zwingend umgesetzt werden muss, wenn diese Map-Variante gehen würde, könnte die es ja auch tun. vorausgesetzt WENN
Greetz
-
In den beiden Büchern zur Einführung in Prolog, mit denen ich arbeite, kann ich leider nichts zu diesem Map-Prädikat finden, falls Du eine Onlinequelle hast, wäre es nett, wenn Du diese ggf. verlinken könntest, denn auch wenn ich "map/2 Prolog" google werde ich nicht fündig.
Gruß
-
21.04.09 16:46 #11
- Registriert seit
- Jun 2005
- Beiträge
- 7.983
Hi Sabrina,Also das map Prädikat hast du doch ins Spiel gebracht bei deinem Beispiel. Wie auch immer du es nennst, du müßtest ein Prädikat schreiben welches diese Übersetzung macht. Die Übersetzung der Präsens in die Präteritumform an sich ist trivial - das sind ja nur 2 Regeln; die sind dir klar, oder?!

GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Achso ich dachte, Du meintest man könnte dieses map-Prädikat problemnah noch anders einsetzen, als ich es bereits getan hatte.
Das Problem an meiner Lösung ist aber, das ich ja selber den Lexikonbestand an Wörtern angegeben habe (von A wie abbauben, bis W wie wünschen), das heisst meine Lösung funktioniert ja lediglich mit den Wörtern, die ich selber in den bestand eingefügt habe, gesucht ist jedoch ein Prädikat, was diese Aufgabe praktisch on-the-fly erledigt
also was einen generellen Umwandlungsansatz enthält ohne einfach eine vorgefertigte Liste wieder auszugeben. Also es muss ein Wort im Präsens eingelesen werden, dass umgehend in die Vergangenheitsform umgewandelt wird und dann sofort wieder ausgegeben wird, anders als bei meinem Ansatz, der das ja nur für die Wörter kann, die ich eingefügt habe.
Sorry das ich mich da etwas blöd ausgedrückt hatte. Diese zwei trivialen Regeln die Du ansprichst sind mir ansich nicht unbedingt klar, bzw. weiss ich nicht was Du meinst.
Gruß
Sabrina
-
21.04.09 17:10 #13
- Registriert seit
- Jun 2005
- Beiträge
- 7.983
Ja, das war mir von Anfang an klar. Ich hätte ausgehend von deinem Beispielcode dein map/2 Prädikat einfach dahingehend geändert.
Na, wie willst du denn grundsätzlich die Übersetzung machen? Nach welchen Regeln erfolgt denn die Übersetzung? Das mußt du dir schon überlegen bevor du überhaupt anfängst ein Programm dafür zu schreiben.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Grundsätzlich möchte ich ein Wort (schwaches Verb) mit einem Read-Befehl einlesen, dieses Wort dann im günstigsten Fall in seine Silben zerlegen und dann die letzte Silbe einfach mit der Silbe für die Vergangenheitsform ersetzen, also "-te".
z.B.
Eingabe : lieben
Zerlegung in:
lieb-en
Ersetzung von "-en" in "-te"
Vielleicht kann man die Silben ja in Einer Liste erfassen, wo im Head der Stamm steht, z.B. "lieb" und im Tail die Endung, der Tail müsste dann wiederum mit der Endung "-te" ersetzt werden, so dachte ich mir das Ganze.
-
21.04.09 19:13 #15
- Registriert seit
- Jun 2005
- Beiträge
- 7.983
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Prolog: Problem mit Listen
Von Pazuzu12 im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 15.11.10, 09:06 -
Problem bei Prolog. Dateiladen
Von Mav3ric im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 19.03.10, 13:53 -
Prolog Problem
Von sabrina21 im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 02.04.09, 10:42 -
Prolog-Interpreter geschrieben in Prolog
Von mohi01 im Forum Sonstige SprachenAntworten: 0Letzter Beitrag: 13.01.08, 14:51 -
Prolog Problem
Von Razorhawk im Forum Sonstige SprachenAntworten: 0Letzter Beitrag: 12.06.05, 02:32





Zitieren


Login




