ren*_*ins 1 functional-programming clojure
我正在尝试从列表或集合中删除元素,如下所示:
(remove :Veronica (list :Veronica :Hailey))
Run Code Online (Sandbox Code Playgroud)
它不起作用,所以,我去删除文档,说我需要将谓词传递给remove函数.但是以下代码有效:
(remove #{:foo} [:foo :bar])
(remove #{:foo} (list :foo :bar))
Run Code Online (Sandbox Code Playgroud)
#{:foo}是一个集合.它为什么有效?
是一个功能集?
谢谢
为什么如下
(remove :Veronica (list :Veronica :Hailey))
;(:Veronica :Hailey)
Run Code Online (Sandbox Code Playgroud)
关键字例如:Veronica是接受一个参数的函数,因此可以用作谓词.
但......
例如,
(:Veronica #{:Veronica})
;:Veronica
(:Veronica #{1 2 "Buckle my shoe"})
;nil
Run Code Online (Sandbox Code Playgroud)
它也原谅了无用的论点:
(:Veronica 4) ; 4 is not a map or set.
;nil
Run Code Online (Sandbox Code Playgroud)
所以(:Veronica :Veronica),(:Veronica :Hailey)都是nil,所以remove在
(remove :Veronica (list :Veronica :Hailey))
Run Code Online (Sandbox Code Playgroud)
......什么都不做,因为谓词总是评估假(ish).
其他解决方案解释了原因
(remove #{:foo} (list :foo :bar))
Run Code Online (Sandbox Code Playgroud)
......有你想要的效果.