任何人都可以向我解释为什么会这样:
(remove-if #'(lambda (var) (member var (list "x"))) (list "x" "y" "z"))
返回这个:
("x" "y" "z")
但是这个:
(remove-if #'(lambda (var) (member var (list 1))) (list 1 2 4))
返回这个:
(2 4)
?
任何人都可以向我解释为什么会这样:
(remove-if #'(lambda (var) (member var (list "x"))) (list "x" "y" "z"))
返回这个:
("x" "y" "z")
但是这个:
(remove-if #'(lambda (var) (member var (list 1))) (list 1 2 4))
返回这个:
(2 4)
?
传递:test #'equal
给member
:
(remove-if #'(lambda (var) (member var (list "x") :test #'equal)) (list "x" "y" "z"))
==> ("y" "z")
注意
(eql "x" "x")
==> NIL
(equal "x" "x")
==> T
(eql 1 1)
==> T
Common Lisp 中默认的单参数测试是eql
.
这是 ANSI CL 标准提供的 4(!) 个通用比较函数之间最合理的选择:
另请参阅Common Lisp 中、、和之间的区别eq
eql
equal
equalp
。
使用set-difference
而不是remove-if
+ member
。