Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
19
ZUGRIFFE
1492
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von sabrina21
    sabrina21 sabrina21 ist offline Mitglied
    Registriert seit
    Dec 2008
    Ort
    Bonn (NRW)
    Beiträge
    16
    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 folgender
    Code :
    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
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    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.

  3. #3
    Avatar von sabrina21
    sabrina21 sabrina21 ist offline Mitglied
    Registriert seit
    Dec 2008
    Ort
    Bonn (NRW)
    Beiträge
    16
    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
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Zitat Zitat von sabrina21 Beitrag anzeigen
    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?
    Nein, mehr braucht man dafür eigentlich nicht. Aber zeig doch mal deinen Code.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Avatar von sabrina21
    sabrina21 sabrina21 ist offline Mitglied
    Registriert seit
    Dec 2008
    Ort
    Bonn (NRW)
    Beiträge
    16
    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
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Zitat Zitat von sabrina21 Beitrag anzeigen
    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)
    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.

  7. #7
    Avatar von sabrina21
    sabrina21 sabrina21 ist offline Mitglied
    Registriert seit
    Dec 2008
    Ort
    Bonn (NRW)
    Beiträge
    16
    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.
     

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Hi.
    Zitat Zitat von sabrina21 Beitrag anzeigen
    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.
    OK. Das ist einfach.
    Zitat Zitat von sabrina21 Beitrag anzeigen
    ich brauche also read Befehle, Befehle mit denen ich Listen verarbeiten kann z.B. atom_chars und weitere Buil-inPrädikate.
    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.

  9. #9
    Avatar von sabrina21
    sabrina21 sabrina21 ist offline Mitglied
    Registriert seit
    Dec 2008
    Ort
    Bonn (NRW)
    Beiträge
    16
    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

     

  10. #10
    Avatar von sabrina21
    sabrina21 sabrina21 ist offline Mitglied
    Registriert seit
    Dec 2008
    Ort
    Bonn (NRW)
    Beiträge
    16
    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ß
     

  11. #11
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Hi Sabrina,
    Zitat Zitat von sabrina21 Beitrag anzeigen
    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.
    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.

  12. #12
    Avatar von sabrina21
    sabrina21 sabrina21 ist offline Mitglied
    Registriert seit
    Dec 2008
    Ort
    Bonn (NRW)
    Beiträge
    16
    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
     

  13. #13
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Zitat Zitat von sabrina21 Beitrag anzeigen
    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.
    Ja, das war mir von Anfang an klar. Ich hätte ausgehend von deinem Beispielcode dein map/2 Prädikat einfach dahingehend geändert.
    Zitat Zitat von sabrina21 Beitrag anzeigen
    Diese zwei trivialen Regeln die Du ansprichst sind mir ansich nicht unbedingt klar, bzw. weiss ich nicht was Du meinst.
    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.

  14. #14
    Avatar von sabrina21
    sabrina21 sabrina21 ist offline Mitglied
    Registriert seit
    Dec 2008
    Ort
    Bonn (NRW)
    Beiträge
    16
    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.
     

  15. #15
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Zitat Zitat von sabrina21 Beitrag anzeigen
    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
    Aha. Und wie?
    Zitat Zitat von sabrina21 Beitrag anzeigen
    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"
    Was ist mit "erobern" o.ä.?
    Zitat Zitat von sabrina21 Beitrag anzeigen
    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.
    Ja, warum eine Liste? Wie könnte da das atom_concat/3 Prädikat nützlich sein? Ist es notwendig wirklich das Wort in seine Silben zu trennen? (evtl. reicht auch die Endung?)

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Prolog: Problem mit Listen
    Von Pazuzu12 im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 15.11.10, 09:06
  2. Problem bei Prolog. Dateiladen
    Von Mav3ric im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 19.03.10, 13:53
  3. Prolog Problem
    Von sabrina21 im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 02.04.09, 10:42
  4. Prolog-Interpreter geschrieben in Prolog
    Von mohi01 im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 13.01.08, 14:51
  5. Prolog Problem
    Von Razorhawk im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 12.06.05, 02:32

Stichworte