3.14 关联列表 (Assoc-lists)
用 Cons 对象来表示映射 (mapping)也是很自然的。一个由 Cons 对象组成的列表称之为关联列表(assoc-listor alist)。这样的列表可以表示一个翻译的集合,举例来说:
> (setf trans '((+ . "add") (- . "subtract")))
((+ . "add") (- . "subtract"))
关联列表很慢,但是在初期的程序中很方便。 Common Lisp 有一个内置的函数 assoc
,用来取出在关联列表中,与给定的键值有关联的 Cons 对:
> (assoc '+ trans)
(+ . "add")
> (assoc '* trans)
NIL
如果 assoc
没有找到要找的东西时,返回 nil
。
我们可以定义一个受限版本的 assoc
:
(defun our-assoc (key alist)
(and (consp alist)
(let ((pair (car alist)))
(if (eql key (car pair))
pair
(our-assoc key (cdr alist))))))
和 member
一样,实际上的 assoc
接受关键字参数,包括 :test
和 :key
。 Common Lisp 也定义了一个 assoc-if
之于 assoc
,如同 member-if
之于 member
一样。
当前内容版权归 readthedocs 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 readthedocs .