2011-01-28 15 views
14

Estoy tratando de aprender Clojure pero mis sinapsis parecen estar conectadas a Smalltalk.¿Cuál es el equivalente de Clojure de inyectar: ​​en: en Smalltalk?

¿Cuál es el equivalente de esta función?

 
[:n :k | (1 to: k) inject: 1 into: [:c :i | c * (n - k + i/i)]] 
  • este es el coeficiente binomial para n, k - también conocido como función "elegir", que representa el número de combinaciones de n cosas tomadas k veces
+0

Impresionante. Esto es lo que se me ocurrió (defn elije [n k] (reduce (fn [c i] (* c (/ (+ (- n k) i) i))) 1 (rango 1 (+ k 1)))). Fue bastante fácil una vez que descubrí cómo convertir la notación de infijo Smalltalk a Lisp, pero la sintaxis aún me duele el cerebro :) –

+2

En lugar de '(+ k 1)' también puedes usar '(inc k)'. –

Respuesta

14

El clojure equivalente de lst inject: s into: f es (reduce f s lst)

+0

Demasiado rápido, demasiado rápido. ¡Estuve unos 20 segundos demasiado lento! –

+2

Preferiría decir que '#inject: into:' es el equivalente a 'reduce' ya que smalltalk get inspire by lisp :) – mathk

Cuestiones relacionadas