是只是用于查找的语法糖?

时间:2013-11-22 07:47:06

标签: lisp common-lisp

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的一些额外功能,这在这里不明显?

1 个答案:

答案 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并继续搜索其汽车为零的实际利弊。