从 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=)))
- if 子句的顺序错误。
- 当字符串匹配时,您将使用下一个元素 (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))))
我是口齿不清的初学者。 我操纵列表列表: ((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=)))
- if 子句的顺序错误。
- 当字符串匹配时,您将使用下一个元素 (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))))