This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2015-09-14
Channels
- # admin-announcements (5)
- # alda (2)
- # beginners (26)
- # boot (30)
- # cider (8)
- # clojure (49)
- # clojure-argentina (1)
- # clojure-berlin (1)
- # clojure-boston (1)
- # clojure-italy (11)
- # clojure-norway (3)
- # clojure-russia (116)
- # clojurescript (156)
- # clojurex (4)
- # clojutre (9)
- # core-async (6)
- # datomic (18)
- # emacs (1)
- # events (4)
- # hoplon (159)
- # ldnclj (13)
- # luminus (4)
- # off-topic (1)
- # re-frame (14)
- # reagent (76)
Mi sono riscritto un fnil che accetta un numero indefinito di default. C’e’ qualche scelta migliore che potrei fare a livello di implementazione?
(defn fnil+ [f & opts]
(fn [& args]
(letfn [(pad [coll] (take (count args) (concat coll (repeat nil))))]
(apply f (map #(if (nil? %1) %2 %1) args (pad opts))))))
((fnil+ + 0 0 0 0) 1 nil 2 nil)
;;3
@reborg: avere le arity piu` usate unrollate manualmente, per quanto orribile da vedere, e` non poco importante performance-wise
@bronsa: Re: performances, capito, posso provare un benchmark o due. Di che ordine di grandezza stiamo parlando?
(defn fnil+ [f & opts]
(fn [& args]
(apply f (map #(if (nil? %1) %2 %1) args (concat opts (repeat nil))))))