次の問題があります。明示的なサクセソートのリストがあります。
(defparameter *tuples*
'((isa budgie bird) (color budgie yellow)
(isa tweetie budgie) (color tweetie green)
(eats budgie seed) (has bird feathers)))
そこで、ここで一連のルールを作成します。
; the explicit successors
(defparameter *tuples2*
'(((isa ?b bird) => (has ?b feathers))
((isa ?b bird) => (has ?b brain))
((isa ?b budgie) => (eats ?b seed))
((isa ?b budgie) => (color ?b yellow))
((isa ?b tweetie) => (color ?b green))
((isa ?b tweetie) => (smart ?b small))))
したがって、ツイートや色が必要な場合は、緑色を返す必要があります。
しかし、ツイートや食事の場合は、セキセイインコから継承しているため、シードを返す必要があります
Tweetieの場合、Tweetieは鳥から継承するため、羽を返す必要があります。
例
(inherit tuples 'tweetie 'heart-rate) => nil
(inherit tuples 'tweetie 'color) => green
(inherit tuples 'tweetie 'eats) => seeds
(inherit tuples 'tweetie 'has) => feathers
親の値を取得する方法がわかりません。
鳥/セキセイインコまたはツイーティーの値を返すforループを備えたヘルパー関数があります。
(defun serve-lmg (state)
(loop for rule in *tuples*
when (equal (first rule) state)
collect (third rule)))
だから私が走るとき
(serve-lmg '(isa ?b bird))
私は得る
((HAS ?B FEATHERS) (HAS ?B BRAIN))
これは私にとって宿題なので、誰かが私のためにそれを解決することは期待していません。私はしばらく立ち往生していて、進歩がありません。あなたがいくつかの助けを与えることができればそれは素晴らしいでしょう。乾杯。