Tengo esto en mis .emacs:
(defalias 'λ 'lambda)
que funciona bien para cosas simples como (funcall (λ (x) x) 1)
.
Pero cuando hago algo como (org-add-link-type "foo" (λ (s) (message s)))
o (add-to-list 'auto-mode-alist '("foo" . (λ () (message "bar"))))
, no funciona y me sale
org-open-at-point: Función no válida: (λ (s) (mensaje s))
y
Error de especificación del modo de archivo: (función no válida (λ nil (mensaje "bar")))
respectivamente.
¿Alguien sabe lo que está mal aquí?
defalias
, pero es posible que desee consultarprettify-symbols-mode
, que, entre otras cosas, le permitirá mostrarlambda
comoλ
sin cambiar realmente el texto subyacente.lambda
(aλ
):pretty-lambdada.el
.Respuestas:
Con algo de ayuda de lunaryorn en reddit , creo que he podido entender por qué estás observando el comportamiento "extraño".
El problema es que estás citando la expresión
Que es equivalente a la forma
Ahora, cuando emacs abre un archivo con la extensión "foo", hace algo como lo siguiente
Observe la cita adicional, antes
(λ
, obviamente esta función no es válida y obtiene el errorInvalid function: ...
Pero entonces, ¿por qué("foo" . (lambda () (message "bar")))
funciona? Esto se explica por la observación de lunaryornPor
'(lambda () (message "bar"))
lo tanto, es una función válida, esto se puede verificar con el siguiente códigoEntonces, la solución sería simplemente no citar la expresión, use lo siguiente
fuente
Parece que el problema no es con el
defalias
, sino más bien dónde y cómo estás llamandoλ
.funcall
toma, como sus argumentos, una función y los argumentos de esa función, por lo que sufuncall
ejemplo funciona bien.Ambos
org-add-link-type
yauto-mode-alist
, sin embargo, esperan símbolos que contienen las funciones relevantes. Por lo tanto, a partir de sus ejemplos, lo siguiente debería funcionar:Si usted está buscando sobre todo para tener
λ
mostrará en su memoria intermedia, considere la posibilidad de probarprettify-symbols-mode
, que mostrarálambda
comoλ
sin cambiar el texto del búfer XX.fuente
lambda
directamente.lambda
macro devuelve unalambda
forma especial auto-citada que el alias no está captando, pero puede haber más magia negra aquí. Invocar a @Malabarba.