2011-01-28 16 views
14

Sto cercando di imparare Clojure ma le mie sinapsi sembrano essere cablate su Smalltalk.Qual è l'equivalente Clojure di iniettare: in: in Smalltalk?

Qual è l'equivalente di questa funzione?

 
[:n :k | (1 to: k) inject: 1 into: [:c :i | c * (n - k + i/i)]] 
  • questo è il coefficiente binomiale per n, k - nota anche come funzione "scegliere", che rappresenta il numero di combinazioni di n oggetti k volte taken
+0

Impressionante. Questo è ciò che mi è venuto in mente (defn scegliere [n k] (riduci (fn [c i] (* c (/ (+ (- n k) i) i))) 1 (intervallo 1 (+ k 1)))). È stato abbastanza facile una volta capito come convertire la notazione infotain Smalltalk in Lisp, ma la sintassi mi fa ancora male al cervello :) –

+2

Invece di '(+ k 1)' puoi anche usare '(inc k)'. –

risposta

14

La clojure equivalente di lst inject: s into: f è (reduce f s lst)

+0

Troppo veloce, troppo veloce. Sono stato circa 20 secondi troppo lento! –

+2

Direi piuttosto che '#inject: into:' è l'equivalente di 'reduce' dato che smalltalk si ispira a lisp :) – mathk

Problemi correlati