こんにちは:)初心者からプロローグ。 (;)/ 2' が間違って何Swi-Prolog:静的プロシージャ `(;)/ 2 'を変更する権限がありません
`静的な手順を変更する権限がありません:これはエラーを生成
dog(rex).
owns(bill,rex).
animallover(X):-owns(X,Y),dog(Y).
not(beat(X,Y)):-animallover(X),isAnimal(Y).
beat(bill,tom);beat(bull,tom).
iscat(tom).
isAnimal(X):-iscat(X).
:
私はこのコードを持っていますか?ありがとうございました。
dog(rex).
owns(bill,rex).
animallover(X):-owns(X,Y),dog(Y).
notbeat(X,Y):-animallover(X),isAnimal(Y).
not(notbeat(bill,tom),notbeat(bull,tom)).
iscat(tom).
isAnimal(X):-iscat(X).
これは問題を解決します。しかし、我々は質問に答えたいと思う"誰がトムに当たったの?"
そのように我々は唯一
?- nothit(X,tom).
を求めることができ、これは法案をもたらすであろう。
私は誰がトムに命中したのかを尋ねるために、コードをどのように変更できますか?
まず、ヒット*が何を意味するかを定義する必要があります。 *についての情報はcat *、*は動物*、* dog *、* owns *、* notbeat *の情報を参照してください。しかし、これらの述語や事実の点でヒット*とは何を意味しますか?それが立てば、これはあまり意味がありません。 – lurker
ああ、私は間違いをしました。私は '?-notbeat(X、tom)' と聞いてみたい。とにかく。それは、Xがビート/ヒットしないことを意味するはずです – Peter
'not(notbeat(bill、tom)、notbeat(bull、tom))'という意味ですか? – lurker