我有以下問題。我有一個明確的成功清單。匹配合法移動生成器
(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))))
所以需要特威特和顏色的情況下,它應該返回綠色,
但在特威特的情況下,和吃應該返回種子,因爲它 繼承它從budgie
在tweetie的情況下,應該返回羽毛,因爲tweetie 繼承它從鳥。
例
(inherit tuples 'tweetie 'heart-rate) => nil
(inherit tuples 'tweetie 'color) => green
(inherit tuples 'tweetie 'eats) => seeds
(inherit tuples 'tweetie 'has) => feathers
我不知道該如何檢索父的價值觀。
我有一個輔助函數,用for循環返回鳥/ budgie或tweetie的值。
(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))
這對我來說功課,所以我不希望有人來解決這個問題對我來說。我只是被卡住了一段時間,我沒有進步。如果你能提供一些幫助,那會很好。乾杯。
是的好像我沒有解釋好,我會修改它,我們需要使用列表來完成這個任務。 –
那麼,它應該使用單一的繼承,沒有限制後裔的數量,基於你所說的「鴨子打字」,並由(對象;這種類型或值的特徵)定義 –
「有」具有相同用法爲「吃」或「顏色」。如果顏色發生衝突,它應該覆蓋它。所以如果顏色是在父代和子代中定義的,如果在這個例子中使用綠色的孩子值。 –