从 lisp 中的列表列表中获取元素

Get element from list of list in lisp

我是口齿不清的初学者。 我操纵列表列表: ((name1, second) (name2, second2))

我的函数的目标是获取列表中第一个节点为名称的第二个元素。

例如: 我的列表是:((name1, second1) (name2, second2)) getelement list name1 应该 return 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
 (defun get-element (list name)
    (cadr (assoc name list :test #'string=)))
  1. if 子句的顺序错误。
  2. 当字符串匹配时,您将使用下一个元素 (cdr) 而不是那个匹配元素 (car)

这应该有效:

(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))))