Zootropo

Diario del mundo geek.

miércoles, mayo 12, 2004

Estructuras condicionales en Lisp


  • (if condición
    
    expr1
    expr2)

    En el caso de que condición sea cierto se evalua expr1, en caso contrario expr2.

    (if (< nota 5)
    
    'suspenso
    'aprobado)

  • (cond (cond1 expr1)
    
    (cond2 expr2)
    ...
    (t exprN))

    Equivalente a una serie de ifs, si se cumple cond1 se evalua expr1, si no, si cond2 es cierto se evalua expr2,... El t final es opcional y dado que se cumple siempre sería equivalente a un default en un switch de java

    (cond ((< nota 5) 'suspenso)
    
    ((< nota 7) 'aprobado)
    ((< nota 9) 'notable)
    ((< nota 10) 'sobresaliente)
    (t 'error))

  • (case expresion
    
    (valor1 expr1)
    ((valor2 valor3) expr2)
    ...
    (otherwise expr))

    Equivalente a los switchs de Java. Si expresión evalua a valor1 se ejecuta expr1, si evalua a valor2 o valor3 (si puede evaluar a mas de un valor se colocan en una lista) se evalua expr2,... Otherwise es equivalente a default en los switchs de java, se ejecuta si no evalúa a ninguno de los demás.

    Nota: case evalua con eql!!!

    (case nota
    
    ((0 1 2 3 4) 'Suspenso)
    (5 'Aprobado)
    (6 'Bien)
    ((7 8) 'Notable)
    ((9 10) 'Sobresaliente))