Condicionales


if

(if s1
  s2
  s3)

Evalúa la sentencia s1; si el resultado es diferente de nil ejecuta s2 y en caso contrario s3. El resultado que se arroja es el de la última sentencia evaluada. La sentencia s3 es opcional, de modo que si s1 es nil, este es el resultado devuelto por if, sin calcular nada más.

;; Indica si un número es positivo o no
(let ((x -10))
  (if (> x 0)
    "positivo"
    "no positivo"))
"no positivo"
;; Indica si un número es positivo o no
(let ((x -10))
  (if (> x 0)
    "positivo"))
NIL

when

(when s1
  s2
  ...
  sn)

Si la sentencia s1 devuelve un valor distinto de nil, se jecutan las instrucciones s2, ..., sn. El resultado que se arroja es el de la última sentencia evaluada.

(when (+ 10 20) ; este resultado es diferente de NIL
  (print 1) ; imprime un uno
  (print 2) ; imprime un dos, p
  ' hecho )
1 
2 
HECHO
(when (= 10 20) ; el resultado es NIL
  (print 1)
  (print 2)
  ' hecho )
NIL

unless

(unless s1
  s2
  ...
  sn)

Si la sentencia s1 devuelve nil, se jecutan las instrucciones s2, ..., sn y el resultado que se arroja es el de la última sentencia evaluada.

(unless (+ 10 20) ; este resultado es diferente de NIL
  (print 1) ; imprime un uno
  (print 2) ; imprime un dos, p
  ' hecho )
NIL
(unless (= 10 20) ; el resultado es NIL
  (print 1)
  (print 2)
  ' hecho )
1 
2 
HECHO

cond

(cond
  (a1 a2 ... au)
  (b1 b2 ... bv)
  ...
  (z1 z2 ... zw)  )

Evalúa secuencialmente las sentencias a1, b1, ..., z1 hasta encontrar la primera que evalúa a algo distinto de nil, entonces ejecuta las sentencias que le siguen y termina la ejecución de cond devolviendo el resultado de la última sentencia calculada.

(let ((e 7))
  ; e es la variable que recorre la lista
  (cond
    ((> e 0) "positivo")
    ((< e 0) "negativo")
    (t ; valor lógico VERDADERO, se pone frecuentemente
       ; como última opción
      "nulo")))
"positivo"

case

(case s
  (v1 a1 ... au)
  (v2 b1 ... bv)
  ...
  (vm z1 ... zw)  )

Evalúa en primer lugar la sentencia s; si el resultado es igual a vi o está contenido en la lista vi, se ejecutan las sentencias que le siguen y termina la ejecución de case devolviendo el resultado de la última sentencia calculada. Es frecuente utilizar como último valor de comparación el símbolo otherwise para indicar cualquier valor diferente a los especificados más arriba.

(let ((e 20))
  (case e
    (1 "es un uno")
    (2 "es un dos")
    ((3 4 5 6 7 8 9 10) "es un número grande")
    (otherwise "es muuuy grande")))
"es muuuy grande"

© 2016, TecnoStats