【发布时间】:2016-03-07 19:43:57
【问题描述】:
我是 lisp 新手,所以如果提前,我很抱歉这是一个简单的问题。
我有一个清单:
(set ‘inventory ‘(parts
((item 1001) (shoes (color brown) (size 10) (cost 20)))
((item 2011) (skirt (color blue) (size 4) (cost 10)))
((item 2120) (pants (color white) (size 32) (cost 30)))
((item 2121) (pants (color brown) (size 34) (cost 30)))))
我正在尝试编写一个按项目编号查看列表并返回正确的函数。
(findItem 1001 inventory) 应该返回:
((item 1001) (shoes (color brown) (size 10) (cost 20)))
这是我目前所拥有的:
(defun findItem (q i)
(cond
((null q)
nil)
((null (cdr i))
nil)
((eq `parts (car i))
(findItem q (cdr i)))
((eq q (cdr (car (car i))))
(car i))
(T
(findItem q (cdr i)))))
除了((eq q (cdr (car (car i)))) (car i)) 之外似乎一切正常
(cdr (car (car i))) 应该返回 (1001) 或部件号
但 eq 的计算结果不为 true,因此函数整体返回 nil。
我们将不胜感激
【问题讨论】:
标签: lisp