Elisp(Emacs Lisp) - Curso Parte 5: Condicional if

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

← Anterior
Siguiente →

2 Me gusta
  • let: No es un condicional. Se utiliza para declarar variables locales dentro de una función. Las variables definidas con let solo existen en el contexto de ese bloque.
(defun area-del-circulo (radio)
  (let ((pi 3.14159))  ; aquí definimos pi
    (* pi (* radio radio))))  ; pi * r^2 para calcular el area
  • cond Funciona como una estructura if-else. Evalúa condiciones y ejecuta el bloque de código correspondiente a la primera condición verdadera.
(defun clasificar-numero (numero)
  (cond
   ((> value 10) :numero-grande)
   ((< value 0) :numero-negativo)
   ((= value 0) :cero)
   ((numberp value) :numero-pequenio)))
ELISP> (clasificar-numero 15)
:numero-grande
ELISP> (clasificar-numero 7)
:numero-pequenio
ELISP> (clasificar-numero -3)
:numero-negativo
ELISP> (clasificar-numero 0)
:cero

(También estoy estudiando uno de los Lisp)

3 Me gusta

Me he puesto nuevamente al tema y encontre por ahi la verdad ahora me fijo en tu comentario tambien he descubierto el pcase que en elisp hace algo asi como el switch en ciertos lenguajes

Por cierto para los que vengais a ver esoto a posteriori esa parte que poneELISP> se accede usando el comando ielm a través del atajo M-x

1 me gusta

yep, es una REPL: https://wikemacs.org/wiki/IELM