¿Cuándo en la práctica debería usar letfn vs. let para definir funciones locales? ¿Qué pasa con los casos en los que deseo tanto funciones locales como no-funciones locales?let vs letfn para definir funciones locales en clojure?
Respuesta
Si todo lo que necesito es una función local o 2 ... o 3 ... Voy a dejarlos. Si necesito dejar una combinación de funciones y no funciones, solo usaré un let normal. dejar y dejar sería una manera muy detallada de hacer esto.
Sin embargo, si necesita recursión mutua a través de sus funciones locales, tendrá que dejarlas de cualquier manera.
Versión corta: utilícelas cuando crea que se ve mejor y cuando sea conveniente. No hay reglas duras y rápidas para usar cualquiera. Son solo herramientas en la caja de herramientas Clojure.
¡Diviértete!
Normalmente es más fácil y más limpio para usar let
: de esa manera se puede definir un conjunto de ambas funciones y que no son funciones en una sola forma, e incluso hacer referencia a las definiciones anteriores:
(let [f (fn [x] ....)
value (reduce f some-collection)
foo bar]
.....)
letfn
es realmente solo es necesario cuando quiere definir múltiples funciones que se refieren recíprocamente entre sí. let
no funcionará en este caso porque no admite referencias recursivas.
- 1. Cuándo usar let vs. if-let en Clojure
- 2. Clojure funciones para Emacs?
- 3. formas recomendadas para depurar funciones Clojure?
- 4. Definir funciones en estructuras
- 5. Clojure let permite enlaces múltiples con el mismo nombre
- 6. Escriba sugerencia para funciones en Clojure
- 7. Redefinición de una variable let en dloj Clojure
- 8. Python definir funciones dinámicas
- 9. defn vs. let respecto a la descomposición
- 10. ¿Cómo puedo definir y-combinator sin "let rec"?
- 11. Composición de funciones en Clojure?
- 12. F # Funciones vs. Valores
- 13. ¿Cómo puedo definir una función en Clojure?
- 14. Funciones de orden superior en Clojure
- 15. ¿Hay algún uso para declaraciones de funciones locales?
- 16. LET versus LET * en Common Lisp
- 17. ¿Cuáles son los efectos secundarios de rendimiento de definir funciones dentro de una función recursiva vs exterior en F #
- 18. ¿Por qué ocaml necesita tanto "let" como "let rec"?
- 19. ¿Hay alguna convención de Clojure para nombrar funciones privadas?
- 20. DEFINIR vs variable en PHP
- 21. Diferencia en Fa # y Clojure al llamar a funciones redefinidas
- 22. ¿Cómo puedo generar funciones recursivas memorizadas en Clojure?
- 23. ¿Es válido para definir funciones en los resultados JSON?
- 24. Lisp Style question label funciones locales o no?
- 25. ¿Funciones abstractas o interfaces de funciones en Clojure?
- 26. Clojure def vs defn para una función sin argumentos
- 27. Clojure: resto vs.
- 28. ¿Cómo se implementa `let` en Clojure y cuál es su sobrecarga?
- 29. rendir parcial: objeto vs: locales
- 30. Cómo definir funciones globales en PHP
Tenga en cuenta que incluso para la recursión simple (una función que el cuerpo usa a sí mismo), se necesita una nota. – fmjrey
Una función puede referirse a sí misma de esta manera: '(fn foo [x] .... (foo ...) ...)' – mikera
¡Sí, de hecho! Aunque en una forma let que significa tener dos nombres para el mismo fn (un nombre en el enlace let, otro en la forma fn) o repetir el mismo nombre dos veces, así letn podría ser mejor. – fmjrey