检查项目是否在列表中的简单方法是什么?
像
这样的东西(in item list)
如果true
和item=1
以及list=(5 9 1 2)
false
,可能会返回item=7
答案 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)