2017-02-28 2 views
0

Hier ist meine Lösung.4clojure # 69 Zusammenführen mit einer Funktion

(defn mf [f & ms] (
    (let [mm (apply merge ms) 
     ks (keys mm) 
     rf (fn [koef fc maps] (reduce fc (filter #(not (= % nil)) (map koef maps))))] 
    (into {} (map #(vector % (rf % f ms)) ks))))) 

Wenn ich versuche, es zu verwenden, erhalte ich einen Fehler.

(mf + {:a 1 :b 2 :d 7} {:a 2 :b 3 :c 6}) 

ArityException Falsche Anzahl von args (0) bestanden: PersistentArrayMap clojure.lang.AFn.throwArity (AFn.java:429)

Allerdings, wenn ich Eingabedefinitionen in repl Zeile für Zeile, alles läuft gut.

>(def f +) 
>(def ms '({:a 1 :b 2 :d 7} {:a 2 :b 3 :c 6})) 
>(def mm (apply merge ms)) 
... 
>(into {} (map #(vector % (rf % f ms)) ks)) 
{:c 6, :a 3, :b 5, :d 7} 
> 

Was ist los mit meiner Lösung?

Antwort

1

Einfache Typo. Sie haben ein zusätzliches Paar Klammern. Es sollte lauten:

(defn mf [f & ms] 
    (let [mm (apply merge ms) 
     ks (keys mm) 
     rf (fn [koef fc maps] (reduce fc (filter #(not (= % nil)) (map koef maps))))] 
    (into {} (map #(vector % (rf % f ms)) ks)))) 

(mf + {:a 1, :b 2, :d 7} {:a 2, :b 3, :c 6}) 
    => {:a 3, :b 5, :d 7, :c 6} 
Verwandte Themen