DESVERRE FUNKER IKKE DEN MEDFØLGENDE KODEN TIL BOKA SLIK DEN SKAL, DERFOR FÅR VI IKKE DETTE TIL Å VIRKE ETTER OPPSKRIFTEN, MEN GÅ IGJENNOM OPPGAVEN NEDENFOR UANSETT (OG PRØV Å IMPLEMENTER), DET ER TANKEGANGEN SOM ER VIKTIGST. start allegro og hent inn logikk systemet (husk at du kommer tilbake til topp-nivå i lisp med :res viss du gjør feil): (load "aima.lisp") (aima-load 'logic) (forklaring på mulige kommandoer etc. i dette systemet finnes på http://www.cs.berkeley.edu/~russell/code/doc/overview-LOGIC.html) kopier inn følgende funksjon: (defun one-of (&rest args) "returns an expression that says that exactly one of the args is true." (let ((negated-args (mapcar #'(lambda (x) `(not ,x)) args))) `(or ,@(let ((results nil)) (for each arg in args do (push `(and ,@(subst arg `(not ,arg) negated-args :test #'equal)) results)) results)))) ved å bruke denne funksjonen kan du fortelle setninger av formen "Jones (J) is either programmer (P), knowledge engineer (K), or manager (M)" til KB med kommandoen (TELL KB (one-of 'JP 'JK 'JM)) OPPGAVEN: opprett en kunnskapsbase KB med kommandoen (setf KB (make-prop-kb)) ; "make propositional knowledge base" fortell KB de nødvendige setninger med TELL (som vist ovenfor): - her må du gi 3 setninger for å fortelle "hver person har en jobb", den første er (TELL KB (one-of 'JP 'JK 'JM)), finn ut de to neste selv - så må du gi 3 setninger for å fortelle "hver jobb har en person", den første er (TELL KB (one-of 'JP 'SP 'CP)), finn ut de to neste selv - se ma du gi 3 setninger for å fortelle begrensningene som ligger i de andre setningene i oppgaven (i boka), her er den første: "Jones owes the programmer $10", ergo så er ikke Jones programmer, dette forteller vi med (TELL KB (not 'JP)), gjør tilsvarende for "The manager's spouse prohibits borrowing money" og "Smith is not married" spørre KB etter svar: - her er det koden ikke funker riktig, men poenget er at du skal spørre KB på formen (ASK KB '(and JP CK SM)), (ASK KB '(and JP SK CM)), osv helt til du spør om den riktige situsjonen som er (ASK KB '(JK SP CM)), og det vil være den eneste situasjonen som ASK returnerer T for (ellers skal ASK returnere NIL)