请在2024年Clojure调查问卷中分享您的想法!

欢迎!请在关于页面查看更多有关如何使用本网站的信息。

+1 投票
core.logic
编辑于

查看conso的文档,这似乎表明地图没有被适当地视为集合

user> (coll? {:a 1}) ; Just for context
true
user> (first {:a 1})
[:a 1]
user> (run* [p q] (conso p q {:a 1})) ; This is the surprising part
()
user> (run* [p q] (conso p q [[:a 1]])) ; For comparison
([[:a 1] ()])
user> (doc conso) ; Docs talk about collection as expected input
-------------------------
clojure.core.logic/conso
([a d l])
  A relation where l is a collection, such that a is the first of l
  and d is the rest of l. If ground d must be bound to a proper tail.
nil

编辑:这对集合也不起作用

user> (run* [p q] (conso p q #{1 3}))
()
user> (first #{1 3})
1
user> (coll? #{1 3})
true

1 答案

+2 投票

Conso只为有序集合工作,这就是为什么它对集合和地图不起作用。没有顺序,就没有有意义的“第一个”和“其余的”概念。我同意,conso的文档可以通过在集合前加上“有序”来变得更加清晰。

...