我有以下问题。我有一个明确的 succesorts 列表。
(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 和 eats 的情况下,应该返回种子,因为它是从 budgie 继承的
在 tweetie 和 had 的情况下,应该返回羽毛,因为 tweetie 继承自 bird。
例子
(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))
这对我来说是家庭作业,所以我不指望有人为我解决它。我只是被卡住了一段时间,我没有进展。如果您能提供一些帮助,那就太好了。干杯。