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

Jef*_*eff 32 lisp list common-lisp

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

就像是

(in item list)
Run Code Online (Sandbox Code Playgroud)

可能返回true如果item=1list=(5 9 1 2)false,如果item=7

Rai*_*wig 43

Common Lisp

FIND 不是一个好主意:

> (find nil '(nil nil))
NIL
Run Code Online (Sandbox Code Playgroud)

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

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

用途MEMBER:

> (member nil '(nil nil))
(NIL NIL)  ; everything non-NIL is true
Run Code Online (Sandbox Code Playgroud)

或者POSITION:

> (numberp (position nil '()))
NIL
Run Code Online (Sandbox Code Playgroud)


Ter*_*aug 20

使用MEMBER测试一个项目是否是一个列表:

(member 1 '(5 9 1 2))  ; (1 2)
Run Code Online (Sandbox Code Playgroud)

FIND与之不同,它还能够测试是否NIL在列表中.


kha*_*hik 7

你可以使用find:

(find 1 '(5 9 1 2)) ; 1
(find 7 '(5 9 1 2)) ; nil
Run Code Online (Sandbox Code Playgroud)

考虑使用:test参数:

(find "a" '("a" "b") :test #'equal)
Run Code Online (Sandbox Code Playgroud)

  • (找到nil'(零无)) - >无 (6认同)