Я новичок в lisp, поэтому приношу свои извинения, если вы продвигаете это, это простой вопрос.Сравнение числа и объекта списка в 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) или номер детали
Но th e eq не оценивает значение true, поэтому функция полностью возвращает nil.
И помощь был бы оценен
Возможный дубликат [В чем разница между eq, eql, equal и equalp в Common Lisp?] (Http://stackoverflow.com/questions/547436/whats-the-difference-between-eq-eql-equal и-EQUALP-в-общем-шепелявостью) – sds