¿Cuál es el equivalente de foldr, foldl en Emacs Lisp?¿Cuál es el equivalente de foldr, foldl en Emacs Lisp?
Respuesta
Si
(require 'cl)
a continuación, puede utilizar la función de Common Lisp reduce
. Pase el argumento de palabra clave :from-end t
por foldr
.
ELISP> (reduce #'list '(1 2 3 4))
(((1 2) 3) 4)
ELISP> (reduce #'list '(1 2 3 4) :from-end t)
(1 (2 (3 4)))
Desde Emacs-24.3 que recomiendan el uso de cl-lib
sobre cl
(que está previsto para el retiro en un futuro lejano), por lo que sería:
(require 'cl-lib)
(cl-reduce #'list '(1 2 3 4))
y desde Emacs-25, se también puede utilizar el paquete para que seq
:
(require 'seq)
(seq-reduce #'list '(1 2 3 4))
Common Lisp library proporciona un montón de sequence functions como la cartografía, fil tering, plegado, búsqueda e incluso clasificación. La biblioteca CL se envía con Emacs de forma predeterminada, por lo que debe atenerse a ella. Sin embargo, me gusta mucho la biblioteca dash.el
, porque proporciona enormes cantidades de funciones para manipulaciones de listas y árboles. También es compatible con anaphoric macros y fomenta la programación funcional, lo que hace que el código sea conciso y elegante.
pliegues de Haskell corresponden con dash.el
pliegues:
foldl
con-reduce-from
foldr
con-reduce-r-from
foldl1
con-reduce
foldr1
con-reduce-r
Suma de un rango de 1 a 10 utilizando pliegues podría ser similar en esto en Haskell y dash.el
:
foldl (+) 0 [1..10] -- Haskell
(-reduce-from '+ 0 (number-sequence 1 10)) ; Elisp
Usted probablemente sabe, que los pliegues son muy generales, y es posible implementar mapas y filtros a través de los pliegues . Por ejemplo, para incrementar cada elemento por 2, currificación y secciones de Haskell permitirían código conciso, pero en Elisp que normalmente escribir lambdas detallado de usar y tirar por el estilo:
foldr ((:) . (+2)) [] [1..10] -- Haskell
(-reduce-r-from (lambda (x acc) (cons (+ x 2) acc)) '() (number-sequence 1 10)) ; Elisp
Adivina qué, no es necesario en dash.el
con macros anafóricas, que permiten una sintaxis especial al exponer las variables de un lambda como accesos directos, como it
y acc
en pliegues. funciones anafóricos comienzan con 2 guiones en vez de 1:
(--reduce-r-from (cons (+ it 2) acc) '() (number-sequence 1 10))
hay funciones montón plegable como en dash.el
:
;; Count elements matching a predicate
(-count 'evenp '(1 2 3 4 5)) ; 2
;; Add/multiply elements of a list together
(-sum '(1 2 3 4 5)) ; 15
(-product '(1 2 3 4 5)) ; 120
;; Find the smallest and largest element
(-min '(3 1 -1 2 4)) ; -1
(-max '(-10 0 10 5)) ; 10
;; Find smallest/largest with a custom rule (anaphoric versions)
(--min-by (> (length it) (length other)) '((1 2 3) (4 5) (6))) ; (6)
(--max-by (> (length it) (length other)) '((1 2 3) (4 5) (6))) ; (1 2 3)
- 1. foldl/foldr query
- 2. foldl es cola recursiva, entonces, ¿cómo es que foldr se ejecuta más rápido que foldl?
- 3. foldr y foldl más explicaciones y ejemplos
- 4. Análisis en Emacs Lisp
- 5. En Lisp (Clojure, Emacs Lisp), ¿cuál es la diferencia entre la lista y la cita?
- 6. PINTURA en Emacs Lisp?
- 7. Implementar zip usando foldr
- 8. ¿Qué tan viable es emacs LISP además de editar emacs?
- 9. emacs - autocompletado en modo Emacs Lisp
- 10. ¿Cuál es el equivalente idiomático de las estructuras C en Lisp?
- 11. Importación de archivos en el archivo de configuración de Emacs Lisp/Emacs en el mismo directorio
- 12. ¿Qué significa [...] # en emacs-lisp?
- 13. Emacs sin Lisp
- 14. En Emacs-lisp, ¿cuál es la forma correcta de utilizar call-process en un comando ls?
- 15. Encontrar el directorio site-lisp de Emacs
- 16. ¿Cuál es el equivalente del párrafo de relleno de emacs en MacVim?
- 17. ¿Está optimizada mi función de foldl reescrita?
- 18. ¿Uso correcto de aplicar en Emacs Lisp?
- 19. ¿Cuál es el equivalente a + = en Matlab?
- 20. ¿Cuál es el equivalente Response.Redirect en Silverlight?
- 21. limo emacs: ¿Cuál es el equivalente de la flecha hacia arriba en las conchas?
- 22. Emacs Lisp resaltado de sintaxis
- 23. ¿Cuál es el equivalente Python de Tomcat?
- 24. ¿Cuál es el equivalente Ruby de "pythonic"?
- 25. ¿Cuál es el equivalente Monotouch de dealloc?
- 26. Orden de Evaluación en Emacs Lisp
- 27. ¿qué comando de shell en emacs lisp?
- 28. ¿Cuál es el equivalente de argv [0]?
- 29. Esquema dialecto de Lisp en Emacs
- 30. Emacs equivalente al `%` de VIM?
Esto debería mejor que sea un comentario a la respuesta Gareth Rees que una respuesta por separado en su derecho propio. – Thomas
@Thomas No es posible escribir comentarios de varias líneas con ejemplos en SO. – ceving