gpt4 book ai didi

clojure - 为什么我可以在 clojure 中使用集合作为谓词?

转载 作者:行者123 更新时间:2023-12-02 05:49:22 25 4
gpt4 key购买 nike

我正在尝试从列表或集合中删除一个元素,如下所示:

(remove :Veronica (list :Veronica :Hailey))

它不起作用,所以,我去删除文档,上面说我需要将谓词传递给删除函数。但是下面的代码有效:

(remove #{:foo} [:foo :bar])
(remove #{:foo} (list :foo :bar))

#{:foo} 是一个集合。为什么有效?

集合是函数吗?

谢谢

最佳答案

为什么会这样

(remove :Veronica (list :Veronica :Hailey))
;(:Veronica :Hailey)
  • 通过集合?
  • 没有明显效果?

关键字,例如 :Veronica是一个接受一个参数的函数,因此可以用作谓词。

但是……

  • 它需要一个 map 或 set 参数。
  • 然后它在参数中查找自己。

例如,

(:Veronica #{:Veronica})
;:Veronica

(:Veronica #{1 2 "Buckle my shoe"})
;nil

它也原谅无用的争论:

(:Veronica 4) ; 4 is not a map or set. 
;nil

所以 (:Veronica :Veronica)(:Veronica :Hailey)都是nil , 所以 remove

(remove :Veronica (list :Veronica :Hailey))

... 没有完成任何事情,因为谓词总是评估 false(ish)。


其他解决方案解释了原因

(remove #{:foo} (list :foo :bar))

...具有您正在寻找的效果。

关于clojure - 为什么我可以在 clojure 中使用集合作为谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27595787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com