| Autor |
Beitrag |
   
Hans
| | Veröffentlicht am Samstag, den 13. Oktober, 2001 - 10:04: | |
Hi, ich habe in Prolog ein Problem mit einer Regel. Ein Kochrezept besagt, das man Mehl und Zucker oder aber Ei und Mehl verrühren soll. Hierzu gibt es folgende Fakten: mischen(mehl,zucker). mischen(ei,mehl). Die Haufrau soll nun abfragen, was sie schon gemischt hat, wie z.B. habe_ich_schon_gemischt(mehl,zucker). Antwort: Ja habe_ich_schon_gemischt(zucker,mehl). Antwort: Ja oder aber habe_ich_schon_gemischt(lebensmittel1,lebensmittel2), wobei sie für lebensmittel1 bzw. lebensmittel2 reale Lebensmittel eingeben soll. Dann sollen z.B. mehl,zucker und ei,mehl angezeigt werden, aber nicht zucker,mehl oder aber mehl,ei. Auch sollen fremde, nicht in der Wissensbasis enthaltenen Lebensmittel zurückgewiesen werden. Mit welcher Regel kann ich denn das erreichen? Bis bald, Hans |
   
Cornelia
| | Veröffentlicht am Samstag, den 13. Oktober, 2001 - 13:34: | |
Ich neheme an, dass du deine Lebensmittel irgendwo definiert hast: zB: lebensmittel(mehl). lebensmittel(zucker). etc. Um zu testen ob etwas ein lebensmittel ist, kannst du eine solche Anfrage in dein Programm einbauen. Angenommen jemand stellt die Anfrage: hisg(zucker, mehl). (für habe ich shcon gemischt) sucht sich Prolog ein passendes Fakt oder eine Regel. Du wirst also eine Regel gemacht haben mit dem Kopf "hisg(X, Y). Prolog unifiziert dann X mit zucker und Y mit mehl. Im Rumpf deiner Regel prüfst du zuerst, ob X und Y Lebensmittel sind. (Ganz einfach z. B. "lebensmittel(X)" schreiben, die Unifikation erledigt Prolog ganz von alleine, logischerweise.) gibt es in deiner Datenbasis keine rosinen und di Anfrage lautet hisg(rosinen, mehl) schlägt die Regel von alleine fehl. in deinem Regelrumpf musst du noch abfragen, ob für die beiden angefragten lebensmittel ein fakt mischen (also mischen(X,Y) besteht. Die Regel könnte also lauten: hisg(X, Y):- lebensmittel(X), lebensmittel(Y), mischen(X,Y). Wenn es draufankommt ob milch mit eiern oder eier mit milch gemischt werden ist es einfach. Wenn das Fakt heisst "mischen(milch, eier)" und du die Anfrage hisg(milch, eier) stellst gelingt sie, die Anfrage hisg(eier, milch) nicht. Das andere müsstest du hingegen explizit programmieren. Dieses Grüst müsstest du jetzt natürlich noch mit Fehlermeldungen und Anweisungen versehen. Alles klar? Liebe Grüsse Cornelia |
   
Hans
| | Veröffentlicht am Sonntag, den 14. Oktober, 2001 - 14:38: | |
Hi Cornelia, nun ist es mir klar. Merci Hans |
|