Con l'aiuto di lunaryorn su reddit , credo di essere stato in grado di capire perché stai osservando il comportamento "strano".
Il problema è che stai citando l'espressione
'("foo" . (λ () (message "bar")))
Che equivale al modulo
(cons "foo" '(λ () (message "bar")))
Ora quando emacs apre un file con estensione "pippo", fa qualcosa di simile al seguente
(funcall '(λ () (message "bar")))
Nota la citazione aggiuntiva, prima (λ
, ovviamente questa non è una funzione valida e ottieni l'errore Invalid function: ...
Ma allora perché ("foo" . (lambda () (message "bar")))
funziona, questo è spiegato dall'osservazione del lunaryorn
Una "lista lambda", cioè una lista la cui macchina è lambda, è anche una funzione valida
Quindi '(lambda () (message "bar"))
è una funzione valida, questa può essere verificata dal seguente codice
(functionp (lambda () "hello")) => t
(functionp (λ () "hello")) => t
(functionp '(lambda () "hello")) => t
(functionp '(λ () "hello")) => nil
Quindi la soluzione sarebbe semplicemente non citare l'espressione usando invece quanto segue
(add-to-list 'auto-mode-alist (cons "foo" (λ () (bar))))
defalias
, ma potresti voler dare un'occhiataprettify-symbols-mode
, che, tra le altre cose, ti consentirà di visualizzarlolambda
comeλ
senza realmente cambiare il testo sottostante.