prolog - fehlende Regel - Vorgehen



  • Hallo,

    ich hoffe mal, dass sich unter uns auch ein paar Personen finden, die Fertigkeiten in Prolog besitzen. Vorweg möchte ich schicken, dass meine eigenen Kentnisse aus der Schule stammen - aus meiner Sicht wurden uns keine Methoden zur Lösung dieses Problems beigebracht.

    Kommen wir also dazu:
    Ich habe als Aufgabe, ein Programm zu schreiben, dass Sachen aus einer Liste liest, dieses Elemtn dann mit einem Fakt vergleicht und die Entsprechung nutzt.
    Ein Beispiel verdeutlicht das ganze.

    translate(transListe, targetliste)
    Aufruf: translate([ich, denke, es],X).
    Als endwert soll dann beispielsweise X = [I, think, it] herauskommen.
    Das ist auch kein Problem und funktioniert soweit.

    ("Regelbasis in der Art wort(Dt, Eng))

    Kommen wir zur Schwierigkeit: Wenn es in der keine Entsprechung für das Dt. Wort gibt, soll es unübersetzt bleiben.
    Also als Beispiel
    Aufruf: translate([ich, denke, nix],X).
    X = [I, think, nix]
    wobei es halt nix in der Art gibt: wort(nix, nix). EXISTIERT SO NICHT!

    Ich denke, es ist mehr eine Prologtechnikfrage als etwas mit Logik. Kann mir jmd einen Hinweis geben, ggf gar eine Lösung veraten?

    Danke.



  • uebersetzen([Y|RS1],[Y|RS2]):-
    not(uebersetzen(Y,Y)),
    uebersetzen(RS1,RS2).
    


  • prologVerzweifelter schrieb:

    Ich denke, es ist mehr eine Prologtechnikfrage als etwas mit Logik. Kann mir jmd einen Hinweis geben, ggf gar eine Lösung veraten?

    Das ist eigentlich relativ einfach und ich wette, dass ihr einen Lösungsansatz dafür gelernt habt: den Cut.

    Mögliche Lösung:

    wort(ich, i).
    wort(denke, think).
    wort(es, it).
    
    translate([], []).
    translate([H|T], [H2|T2]) :- wort(H, H2), !, translate(T, T2).
    translate([H|T], [H|T2]) :- translate(T, T2).
    

Anmelden zum Antworten