¿Puede Clojure implementar construcciones (g ∘ f) como Haskell's g . f
? Actualmente estoy usando soluciones como (fn [n] (not (zero? n)))
, que no es tan agradable :)Composición de funciones en Clojure?
Respuesta
Hay una función para hacer esto en clojure.core
llamada comp
. P.ej.
((comp not zero?) 5)
; => true
También puede ser que desee considerar el uso de ->
/->>
, por ejemplo,
(-> 5 zero? not)
; => true
Otra forma es (reduce #(%2 %1) n [zero? not])
pero me gusta (comp not zero?)
, ya mencionada por Michal, mejor.
Puede usar el acceso directo macro de Clojure para funciones anónimas para reescribir su versión con menos teclas.
user=> (#(not (zero? %)) 1)
true
Para el caso específico de componer not
y otra función, puede utilizar complement
.
user=> ((complement zero?) 1)
true
Usando not
en combinación con when
y if
es bastante común que if-not
y when-not
son funciones básicas.
user=> (if-not (zero? 1) :nonzero :zero)
:nonzero
El acceso directo lector-macro parece muy útil ya que el código es breve y legible. Tampoco sabía sobre "si-no" y "cuándo-no", ¡gracias! – StackedCrooked
* macros centrales. 'if-not' y' when-not' son macros, por lo que no hay costo de tiempo de ejecución. – Carcigenicate
- 1. ¿Funciones de composición en Java?
- 2. Composición de funciones en Java
- 3. Composición de funciones en C++
- 4. Composición de funciones en R (y funciones de alto nivel)
- 5. ¡La composición de las funciones en una lista de funciones!
- 6. ¿Estoy utilizando correctamente la composición de funciones?
- 7. Clojure funciones para Emacs?
- 8. composición de funciones en Haskell con argumentos de tupla
- 9. Funciones de coincidencia de patrones en Clojure?
- 10. ¿Funciones abstractas o interfaces de funciones en Clojure?
- 11. Funciones de orden superior en Clojure
- 12. Haskell Reglas de reescritura y composición de funciones
- 13. Escriba sugerencia para funciones en Clojure
- 14. ¿Qué funciones en Clojure core preserve meta?
- 15. Plegable, composición de funciones, mónadas y pereza, ¿verdad?
- 16. Clojure: La generación de funciones de plantilla
- 17. Calling Clojure funciones de orden superior
- 18. composición función genérica en Haskell
- 19. datos de tuberías a través de funciones arbitrarias en Clojure
- 20. Llamar a funciones Java desde Clojure
- 21. formas recomendadas para depurar funciones Clojure?
- 22. ¿Cómo evaluar una secuencia de funciones impuras en Clojure?
- 23. Composición de la función
- 24. Composición de función y tupla
- 25. Haskell función composición
- 26. funciones matemáticas de composición tipográfica en LaTeX para crear en la Solicitud Android
- 27. Composición de música en LaTeX
- 28. Haskell: diferencia en el rendimiento de la composición de diferentes funciones?
- 29. "reducir" o "aplicar" usando funciones lógicas en Clojure
- 30. ¿Cómo puedo generar funciones recursivas memorizadas en Clojure?
Asegúrate de usar 'partial' cuando harías" currying "en Haskell. Así que para map/reduce, necesitarías hacer '(let [reducer (comp (partial reduce +) (partial map get-value))] (reducer my-things))' –
También 'comp not' puede ser reemplazado con 'complemento':' ((complemento cero?) 5) ' – defhlt