Ausgehend von dem Beispiel auf dieser Seite:
http://www.logisch-gedacht.de/logikraetsel/einsteinr…
Habe ich versucht ein anderes Einstein Rätsel in Prolog zu Codieren worin auch Negationen wie „A sitzt NICHT neben B“ vorkommen.
Als Hilfsprädikate habe ich die gleichen verwendet die auch im angegebenen Link vorkommen. Also:
links(A,B,[A|[B|\_]]).
links(A,B,[_|R]):-links(A,B,R).
neben(A,B,L):-links(A,B,L);links(B,A,L).
Demnach habe ich Aussagen wie:
„Der Herr im Hemd saß nicht neben dem Herrn mit der Weste“
Codiert als:
neben([_,hemd,_],[_,not(weste),_],X),
Dies scheint zwar syntaktisch korrekt zu sein, da der Compiler keinen Fehler ausgibt, aber Logisch falsch da nur ein „false“ ausgegeben wird wenn es ausgeführt wird.
Wie ich die Negation „nicht neben“ anders darstellen könnte fällt mir leider nicht ein und ich bin mir auch nicht sicher ob ein einfaches not() dabei richtig ist. Kann mir vielleicht jemand weiterhelfen?
Den gesamten Code (25 Zeilen) gibt es hier:
http://uploaded.to/file/ezjmoh