建议lispier成语

时间:2013-11-05 14:38:19

标签: lisp common-lisp idioms

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

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:7)

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

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

请注意,如果您要为搜索you can use :key and :test使用其他条件。例如,以下检查以查看是否有任何符号具有名称“JAM”。我们使用:key来获取symbol-name和:test,因为我们必须使用#'等于比较字符串。

(find "JAM" '(a b c jam) :key #'symbol-name :test #'equal)