gpt4 book ai didi

clojure - 非映射集合谓词?

转载 作者:行者123 更新时间:2023-12-02 16:32:13 26 4
gpt4 key购买 nike

是否有一个 Clojure 谓词表示“集合,但不是映射”?

这样的谓词是有值(value)的,因为可以对除映射之外的所有集合执行许多操作。例如,(apply + ...)(reduce + ...) 可以与向量、列表、惰性序列和集合一起使用,但不能与映射一起使用,因为在这样的上下文中, map 的元素最终为 clojure.lang.MapEntry 。据我所知,是集合和映射导致了这些谓词的问题:

  • sequential? 对于向量、列表和惰性序列来说是正确的,但对于映射和集合来说都是错误的。 (seq? 类似,但对于向量来说是错误的。)
  • coll?seqable? 对于集合和映射以及我能想到的所有其他类型的集合都适用。

当然我可以定义这样的谓词,例如像这样:

(defn coll-but-not-map?
[xs]
(and (coll? xs)
(not (map? xs))))

或者像这样:

(defn sequential-or-set?
[xs]
(or (sequential? xs)
(set? xs)))

我想知道是否有一个内置的 clojure.core(或贡献的库)谓词可以做同样的事情。

此问题与 this one 相关和 this one但他们的答案并没有回答。 (如果我的问题与我未找到的问题重复,我很高兴将其标记为这样。)

最佳答案

For example (apply + ...) or (reduce + ...) can be used with vectors, lists, lazy sequences, and sets, but not maps

我认为这与集合无关。就您而言,您遇到的问题不是一般的 applyreduce 应用程序,而是特定的 + 函数。即使我们在这里使用向量,(apply + [:a :b :c]) 也不起作用。

我的观点是,您正在尝试解决特定领域的问题,这就是为什么 Clojure 本身没有通用解决方案。因此,请使用您能想到的任何适当的谓词。

关于clojure - 非映射集合谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42743788/

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