我是lisp的初学者。 我操纵列表清单: ((name1,second)(name2,second2))
我的函数的目标是获取列表的第二个元素,其名称为第一个节点。
例如: 我的列表是:((name1,second1)(name2,second2)) getelement list name1应返回second1。
(defun getelement (list name)
(if (eq list '())
(if (string= (caar list) name)
(car (car (cdr list)))
(getelement (cdr list) name)
)
()
)
)
但是我收到了这个错误。我真的不明白我的代码发生了什么。我试着把'之前的表达......
Error: The variable LIST is unbound.
Fast links are on: do (si::use-fast-links nil) for debugging
Error signalled by IF.
Backtrace: IF
答案 0 :(得分:3)
这应该有效:
(defun getelement (list name)
(if (eq list '()) ;end of list,...
'() ;return empty list
(if (string= (caar list) name) ;matches,
(car (car list)) ;take the matching element
(getelement (cdr list) name))))
答案 1 :(得分:1)
(defun get-element (list name)
(cadr (assoc name list :test #'string=)))