per*_*sid 2 lisp idioms common-lisp
在Common Lisp中,检查元素是否在列表中的更惯用的方法是什么?目前我正在检查"get"是否属于这样的列表:
(some #'(lambda (x) (string= x "get")) '("get" "update" "delete" "replace"))
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
如果项目在列表中,Find将返回该项目,否则它将返回nil
(find 'a '(1 a 2 f))
Run Code Online (Sandbox Code Playgroud)
请注意,如果要对搜索使用不同的条件,可以使用:key和:test.例如,以下检查以查看是否有任何符号具有名称"JAM".我们使用:key来获取symbol-name和:test,因为我们必须使用#'等于比较字符串.
(find "JAM" '(a b c jam) :key #'symbol-name :test #'equal)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |