Prolog

whasabi

Cadet 3rd Year
Registriert
Dez. 2013
Beiträge
42
Hallo :)
Ich habe gerade eine Aufgabe in Prolog zu lösen und kenne mich nicht wirklich aus.. :/

Das hier ist die Angabe:

Define operators play and and so that the following two terms are syntactically
correct:
jimmy plays football and squash
susan plays tennis and basketball and volleyball
Describe the structure of these terms and translate them into standard notation (prefix
notation with brackets).

und da dies meine erste Aufgabe von vielen solchen ist, hab ich dann mal im Inet geschaut um es zu verstehen und es war sogar die Lösung (ich denke das soll die Lösung sein) im Inet:

:-op(300,xfx,plays).
:-op(200,xfy,and).

plays(jimmy, and(football,squash))

plays(susan,and(tennis, and(basketball,volleyball)))

Wenn ich jetzt :
:-op(300,xfx,plays).
:-op(200,xfy,and).

in eine .pl Datei speichere und compliliere und dann in der Prolog-Shell
plays(jimmy, and(football,squash)).
eingebe kommt nur:
ERROR: toplevel: Undefined procedure: (plays)/2 (DWIM could not correct goal)


wo liegt der Fehler? versteh ich die Angabe falsch? was mach ich falsch?
Die Listen haben wir letztes mal schon durchgenommen und da hab ich alles verstanden :/
 
hast du deine plays(X,Y) - Regeln mit einem . abgeschlossen?
Ansonsten... hm. Is leider schon fast 10 Jahre her, ich krieg da nix mehr auf die Reihe.
 
Daaron schrieb:
hast du deine plays(X,Y) - Regeln mit einem . abgeschlossen?
Ansonsten... hm. Is leider schon fast 10 Jahre her, ich krieg da nix mehr auf die Reihe.

ja ich habs mit einem Punkt abgeschlossen
aber ich habe jetzt nicht

plays(X,Y):- op(300,xfx,plays).

geschrieben
weil dann kommt beim kompilieren wieder der fehler

singelton variables:[X,Y]
 
Gleich vornweg, ich hab keinen Plan von Prolog und hab nach der Lösung nur gegooglet und ein bisschen rumgespielt.

Also ich hab jetzt diesen Code probiert, also praktisch genau den, den du auch gepostet hast (nur mit Punkt am Ende).
Code:
:-op(300,xfx,plays).
:-op(200,xfy,and).

plays(jimmy, and(football,squash)).

plays(susan, and(tennis,and(basketball,volleyball))).
Bei mir scheint es im Interpreter keine Probleme zu geben.
Code:
| ?- plays(jimmy,X).

X = football and squash

yes
| ?- plays(susan,X).

X = tennis and basketball and volleyball

yes
| ?- plays(susan,and(tennis,X)).

X = basketball and volleyball

yes
| ?- plays(X,and(tennis,and(basketball,volleyball))).

X = susan

(1 ms) yes

So ist das doch sicherlich gedacht oder?

Edit: Anmerkungen
Ich habe es im Interpreter sowohl mit gnu-prolog (1.4.4 OSX) als auch mit swi-prolog (5.10.4 Raspian) getestet. Kompiliert habe ich es nur aufm Pi mit swi-prolog, da es dort die GNU-Variante nicht in den Paketquellen gibt und das Kompilieren unter OSX irgendwie buggy zu sein scheint.
 
Zuletzt bearbeitet:
Zurück
Oben