2

在 Common Lisp 中,有什么更惯用的方法来检查一个元素是否在列表中?目前我正在检查“get”是否属于这样的列表:

(some #'(lambda (x) (string= x "get")) '("get" "update" "delete" "replace"))
4

2 回答 2

9

member如果您需要在列表中查找,请使用函数nil

[1]> (member nil '(1 nil 2 (nil)))
    (NIL 2 (NIL))
[2]> (member nil '(1 2 (nil)))
    NIL
[3]> (member nil '(1 2 (nil) nil))
   (NIL)
[4]> (member '(nil) '(1 2 (nil) nil))
   NIL
[5]> (member '(nil) '(1 2 (nil) nil) :test #'equal)
   ((NIL) NIL)
[6]> (member "asd" '(1 2 "asd" (nil) nil) :test #'equal)
   ("asd" (NIL) NIL)
于 2013-11-05T15:01:25.637 回答
7

如果它在列表中,Find 将返回该项目,否则它将返回 nil

(find 'a '(1 a 2 f))

请注意,如果您想使用不同的搜索条件,您可以使用 :key 和 :test。例如,以下检查是否有任何符号具有名称“JAM”。我们使用 :key 来获取符号名称和 :test 因为我们必须使用 #'equal 来比较字符串。

(find "JAM" '(a b c jam) :key #'symbol-name :test #'equal)
于 2013-11-05T14:52:18.353 回答