【发布时间】:2011-09-02 22:03:46
【问题描述】:
检查项目是否在列表中的简单方法是什么?
类似
(in item list)
如果item=1 和list=(5 9 1 2) 和false 如果item=7 可能返回true
【问题讨论】:
标签: list lisp common-lisp
检查项目是否在列表中的简单方法是什么?
类似
(in item list)
如果item=1 和list=(5 9 1 2) 和false 如果item=7 可能返回true
【问题讨论】:
标签: list lisp common-lisp
普通 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
【讨论】:
使用MEMBER 测试一个项目是否在列表中:
(member 1 '(5 9 1 2)) ; (1 2)
与FIND不同,它还可以测试NIL是否在列表中。
【讨论】:
T 或NIL。因此,我建议这个答案应该包含在 if 中,并且所有定义为阅读此页面的任何人都在寻找的功能:(defun contains (item sequence) (if (member item sequence) T NIL))
你可以使用find:
(find 1 '(5 9 1 2)) ; 1
(find 7 '(5 9 1 2)) ; nil
考虑使用:test 参数:
(find "a" '("a" "b") :test #'equal)
【讨论】: