2014-01-24 2 views
0

При написании функции, которая принимает несколько наборов в качестве входов, я хотел бы иметь возможность выводить их союз объединения. До сих пор я записал функцию:Установить соединение с множеством arity

(defn foo [x y] 
    (clojure.set/union x y)) 

Но также пытались что-то вдоль линий

(defn foo 
    ([x y] (clojure.set/union x y)) 
    ([x y & args] (clojure.set/union x y args))) 

, который выводит фанки результаты, которые не соответствуют

(clojure.set/union #{1 2 3} #{2 3 4} #{4 5 6}) 

Очевидно я пропуская некоторую простую реализацию заданных функций, пытаясь построить foo, функцию множественной функции arity.

+0

Обратите внимание, что функция вы просите именно 'clojure.set/union' уже. Я предполагаю, что вы хотите сделать что-то более подробное, но если вы просто хотите многоуровневый «союз», у вас его уже есть! – amalloy

ответ

2

Ваша проблема в том, что args - это Seq, содержащий все множества, которые вы передавали после первых двух, но функция union ожидает, что его аргументы будут наборами.

Что вы хотите, чтобы apply функция:

(defn foo 
    ([x y] (clojure.set/union x y)) 
    ([x y & args] (apply clojure.set/union x y args))) 
+0

Я столкнулся с этой проблемой с функциями вне установленных функций. Этот пост, безусловно, устранил проблемы. – sunspots

Смежные вопросы