Emacs Lisp no tiene soporte sintáctico para valores predeterminados no nulos de parámetros opcionales. ¿Cuál es el idioma recomendado para suministrar estos parámetros?
Para aclarar mi punto, aquí hay una forma demasiado explícita de hacerlo.
(defun command (a &optional supplied-b)
(let ((b (or supplied-b default-b)))
(command-body a b)))
¿Cuál, en todo caso, es el estilo recomendado?

setqen una forma booleana "pura" comoor. En mi opinión,whenes definitivamente más apropiado aquí, pero generalmenteletes la expresión de elección para establecer o cambiar enlaces locales. IOW, el código original me parece mucho más agradable.(unless b (setq b default)podría ser mejor. Personalmente, creo queletes redundante aquí porquebya es local para eldefun.letsobre una forma de efectos secundarios comosetq. Es el código para un parámetro predeterminado, pero el uso liberal desetqcambiar las variables locales hace que el código sea difícil de leer y seguir. Creo que es mejor considerar todos los enlaces locales inmutables, y solo establecer nuevos enlaces conlet. IOW, prefiera un estilo funcional sobre uno imperativo.Puede usar
cl-defun, lo que le permite especificar un valor predeterminado para argumentos opcionales:El valor predeterminado, en este caso
default-b, se evaluará cada vez que se llame a la función.fuente