Bueno, lo de los condicionales en Elisp aún no lo he entendido por completo, así que ire explicando poco a poco lo que sé, por lo que he encontrado existen 3 condicionales principales if, when, cond, creo que tambien let, pero bueno como yo tampoco lo entiendo bien ya que se llegan a usar funciones especificas que yo no controlo junto con esto pues me hace el lio pero bueno veamos bien lo que hacemos. (Ire actualizando)
Condicional IF
Con numeros
(setq hola 3)
(if (eq hola 4) (message "Hola ind") (message "deadline"))
Este codigo es muy sencillo tengo una variable hola a la cual le doy el valor 3 la parte que pone eq
es para comparar si es igual a un numero de esta manera si hola es igual a cuatro.
Ahora introduciendo input por parte de un usuario
(setq hola (read-number "Introduzca un numero:"))
(if (eq hola 4) (message "Hola ind") (message "deadline"))
Si ejecutamos el codigo podemos ver que acontece lo siguiente
Condicional cond
El condicional if en elisp solo nos permite hacer algo si se cumple una condicion y si no se cumple otra cosa si queremos hacer algo que podamos verificar una condicion luego otra y al final un caso para todo lo demás se utilizara el condicional cond su sintaxis es algo como lo siguiente
(setq mi_variable 4)
(cond
((> mi_variable 7) (message "Es tu tormento")
((< mi_variable 4) (message "Mi amore"))
(t (message "Tontos temed a %d " mi_variable))
))
Aqui muestro un ejemplo del uso del condicional cond para hacer una funcion que mande un mensaje al buffer de emacs si el numero es positivo,negativo o cero
Ojo aqui las comparaciones de igualdad se pueden hacer
(= 0 numero)
ya que aqui las variables no se setean por igual esta libre para hacer la comparacion
Condicional pcase
Pcase es otra de las sentencias condicionales de Emacs Lisp la cual es más parecida al switch case de otros lenguajes como C o Java o al match case de python.
El condicional pcase emplea la siguiente sintaxis
(let ((x 10))
(pcase x
(1 (message "Hola mundo"))
(10 (message "Normal"))
(t (message "Resto"))))
Como podeis ver aqui tenemos una variable x definida localmente en un let la cual tiene un valor 10 con este condicional hacemos que si x tiene valor 1 mande al minibuffer el mensaje Hola mundo si tiene el valor 10 manda normal y en cualquier otro caso te manda el mensaje Resto aqui se puede ver que en este caso le ponemos el valor t y como es cierto vamos a decirlo te lo asume o eso creo