Translate

domingo, 30 de diciembre de 2012

Estructuras de control de programa (Primera parte)



Condicionales


if


Es similar que en otros lenguajes: (if (condición) (entonces) (otro))

Si la condicion es verdadera se evaluara la expresión "entonces", si la condicion es falsa, se evaluará la expresión "otro".
En lisp el valor destinado para falso es NIL, que también significa lista vacia; el valor logico para verdadero es T. Veamos algunas funciones de comparación:

> (set 'x 4)
4

> (= x 4)     ; ¿x es igual a 4?
T

> (/= x 4)    ; ¿x no es igual a 4?
NIL

> (< x 5)    ; ¿x es menor que 5?
T

Vamos a los bifes con if:

> (set 'temperatura 28)
28

> (if (< temperatura 30) (set 'clima "templado") (set 'clima "caluroso"))
"templado"

When


Es similar a if, solo que no contempla el hecho de ejecutar alguna acción en el caso de la condición sea falsa, veamos:

(when (condicion) (entonces))

Cuando la condición es verdadera evalua la expresión entonces.

> (set 'nombre "maria")
"maria"

> (when (EQUAL nombre "maria") (princ "te amo, vida"))
"te amo vida"

Cond


Es inapropiado aca usar sentencias if anidadas, para evitar esto se usa cond, que evaluará cierta expresión segun la condicion sea verdadera. Es parecido y cumple la misma funcion que case o select en otros lenguajes.
Ejemplo:

(defun hacer-algo (temperatura)
       (cond ((< temperatura 10) "a mirar tele")
             ((< temperatura 30) "juguemos al futbol")
             ((< temperatura 40) "a tomar helado con mi Victoria")
             ((>= temperatura 40) "¡Vamos a la playa, Victoria!")))


> (hacer-algo 15)
"juguemos al futbol"

> (hacer-algo 36)
"a tomar helado con mi Victoria"


Case


Si se quiere tomar una decisión basada en la comparación de una variable frente a un conjunto conocido de valores constantes, case es con frecuencia más conciso que cond. Ojo, la variable no puede usarse para comparar cadenas de caracteres:

(defun elegir-color (color)
         (case color
               (:rojo "rosa")
               (:azul "tulipan")
               (:verde "malvon")
               (:lila "azucena")
               (:amarillo "margarita")
               (otherwise "¡Elija otro color!..."))) ; otro caso


> (elegir-color :lila)
"azucena"


Otro ejemplo:

(defun elegir-valor (valor)
         (case valor
               (0 "cero")
               (3 "tres")
               (9 "nueve")
               (7 "siete")
           (otherwise "¡Elija otro valor!...")))

> (elegir-valor 2)
"¡Elija otro valor!..."

En la segunda parte veremos las expresiones iterativas. Saludos :-P y felices fiestas!!!