CL-USER> *mylist*
((RED . 5) (RED . 4) (RED . 3) (BLUE . 5) (RED . 2) (BLUE . 4))
CL-USER> (assoc 'blue *mylist*)
(BLUE . 5)
CL-USER> (find 'blue *mylist* :key #'car)
(BLUE . 5)
在我看来,assoc
只是find
的一个特例,这是真的还是我错过了assoc
的一些额外功能,这在这里不明显?
答案 0 :(得分:4)
来自clhs.lisp.se/Body/f_assocc.htm:
两个表达式
(assoc item list :test fn)
和
(find item list :test fn :key #'car)
在含义上是等价的,但有一个例外:如果nil出现在alist中代替一对,而item为nil,find会在alist中计算nil的汽车,发现它等于item,并返回nil, assoc将忽略alist中的nil并继续搜索其汽车为零的实际利弊。