检查项目是否在列表中(Lisp)

时间:2011-05-26 20:08:21

标签: list lisp common-lisp

检查项目是否在列表中的简单方法是什么?

这样的东西
(in item list)
如果trueitem=1以及list=(5 9 1 2) false

可能会返回item=7

3 个答案:

答案 0 :(得分:41)

Common Lisp

FIND不是一个好主意:

> (find nil '(nil nil))
NIL

以上意味着NIL不在列表(NIL NIL)中 - 这是错误的。

FIND的目的不是检查成员资格,而是查找满足测试的元素(在上面的示例中,测试函数是通常的默认值EQL)。 FIND会返回这样一个元素。

使用MEMBER

> (member nil '(nil nil))
(NIL NIL)  ; everything non-NIL is true

POSITION

> (numberp (position nil '()))
NIL

答案 1 :(得分:20)

使用MEMBER来测试某个项目是否在列表中

(member 1 '(5 9 1 2))  ; (1 2)

FIND不同,它还可以测试NIL是否在列表中。

答案 2 :(得分:7)

您可以使用find

(find 1 '(5 9 1 2)) ; 1
(find 7 '(5 9 1 2)) ; nil

考虑使用:test参数:

(find "a" '("a" "b") :test #'equal)