Clojure 如何在多个集合的所有组合中测试给定的和?

Clojure 如何在多个集合的所有组合中测试给定的和?,clojure,Clojure,我在4Clojure网站上工作 我可以添加什么样的“for”语句来组合检查这些集合中的每一个集合,以查找总和为0的项的子集 我在这里特别有几个问题: 是否有任何clojure函数接受任意数量的集合 如果是这样,我如何生成所有子集并对这些子集求和而不向代码中添加额外的Clojure,或者我弄错了 我需要填写这个部分 (= true (__ #{-1 1 99} #{-2 2 888} #{-3 3 7777})) 你是说集合(而不是地图)?但

我在4Clojure网站上工作

我可以添加什么样的“for”语句来组合检查这些集合中的每一个集合,以查找总和为0的项的子集

我在这里特别有几个问题:

  • 是否有任何clojure函数接受任意数量的集合

  • 如果是这样,我如何生成所有子集并对这些子集求和而不向代码中添加额外的Clojure,或者我弄错了

  • 我需要填写这个部分

    (= true  (__ #{-1 1 99}
                 #{-2 2 888}
                 #{-3 3 7777}))
    
  • 你是说集合(而不是地图)?但实际上,这并不重要。
    例如,接受一个参数,但您可以创建接受任意数量参数的匿名函数。
    ((fn[&args](映射计数args)){-1199}{-2888}{-337777})


    (#(映射计数%&){-1199}{-2888}{-337777})

  • 您可以使用from
    combinationics
    contrib生成所有子集,然后使用
    +

    #(映射(部分减少+)(子集%)

  • 所以,这个问题可以通过这两个函数来解决:

    (defn sums [s] 
      (set (map #(reduce + %) (rest (subsets s)))))
    
    (defn cmp [& sets]
      (not (empty? (apply intersection (map sums sets)))))
    

    我无法使
    4clojure
    从contrib导入库,因此我将其保持原样。

    非常有用,但这不会回答4clojure的问题。。。。。还有其他的尝试吗?上面提到的,再加上创建集合的所有子集的机制,应该足以让您找到答案。@jayunit100:您可能想先解决这个问题。功率集(减去空集)正是另一种机制。