clojure - 为什么此数据记录查询会聚合?

标签 clojure clojurescript datomic datalog datascript

From https://github.com/tonsky/datascript

(->
 (d/q '[:find ?color (max ?amount ?x) (min ?amount ?x)
        :in   [[?color ?x]] ?amount]
      [[:red 10]  [:red 20] [:red 30] [:red 40] [:red 50]
       [:blue 7] [:blue 8]]
      4)
 pr-str
 js/console.log)
;;; ([:red [20 30 40 50] [10 20 30 40]] [:blue [7 8] [7 8]]) 

(->
 (d/q '[:find ?color (max ?amount ?x) (min ?amount ?x)
        :in   [[?color ?x]] ?amount]
      [[:red 10]  [:red 20] [:red 30] [:red 40] [:red 50]
       [:blue 7] [:blue 8]]
      3)
 pr-str
 js/console.log)
;;; ([:red [30 40 50] [10 20 30]] [:blue [7 8] [7 8]]) 

(->
 (d/q '[:find ?color (max ?amount ?x) (min ?amount ?x)
        :in   [[?color ?x]] ?amount]
      [[:red 10]  [:red 20] [:red 30] [:red 40] [:red 50]
       [:blue 7] [:blue 8]]
      2)
 pr-str
 js/console.log)
;;; ([:red [40 50] [10 20]] [:blue [7 8] [7 8]]) 

因此,这不是一个关于它在做什么的问题,而是一个关于它如何(或至少为什么)这样做的问题。 max 和 min 是分别返回其后续整数的最大值或最小值的函数。 ?amount 如何成为限制聚合计数的因素?为什么这些东西会聚集在一起?代码如何运行以使其聚合。我真的不明白这段代码是如何生成它所产生的结果的。

最佳答案

maxminoverloaded在数据原子查询中。

一元 (min ?x)(max ?x) 函数聚合返回单个数字。

二进制 (min ?n ?x)(max ?n ?x) 函数聚合以返回长度受 ? 限制的项目集合? n.

关于clojure - 为什么此数据记录查询会聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26952424/

相关文章:

logging - ClojureScript 是否有可切换的日志记录? (ClojureScript 的 log4j 样式日志记录)

clojure - Datomic 与 Neo4j 相比如何?

clojure - 引用谓词内最后线程状态的 cond-> 线程宏替代方案?

clojure - 为什么 run* 不适用于 core.logic 中的自然数?

sql - 使用 LIKE 子句正确格式化 sql 查询

clojure - 如何获取试剂中某个项目的索引

clojure - 如何在 Clojure 中正确读取 RandomAccessFile?

clojurescript - 他们是否使用了 clojurescript 转译器来转译转译器?

clojure - 我们可以更改数据枚举还是可以向数据枚举添加任何新值?

database - 如何使用 datomic Clojure REPL CLI 界面列出 datomic 中的可用数据库