Cuando su if
es 'manco', como lo llaman (es decir, que no contiene else
rama), es típicamente más fácil y más idiomática utilizar when
y unless
: http://www.cs.cmu.edu/Groups/AI/html/hyperspec/HyperSpec/Body/mac_whencm_unless.html
Cuando llama al (when pred x y ... z)
, simplemente evaluará x y z
secuencialmente si pred
es verdadero. unless
se comporta de manera similar cuando pred
es NIL. x y z
puede representar cualquier cantidad de declaraciones de una hacia arriba. Por lo tanto:
(when pred (thunk))
es lo mismo que
(if pred (thunk))
Algunas personas dicen when
y unless
siempre debe usarse para 'one-tal sí armados', debido a la claridad.
Editar: El hilo me hizo una idea. Esta macro:
(defmacro if/seq (cond then else)
`(if ,cond (progn ,@then) (progn ,@else)))
debe habilitar esta:
(if/seq (find input num) //if this
((setq num NEWNUM) (FUNCT2)) //then execute both of these
((list 'not found)))))
lo tanto, el formato general es:
(if/seq *condition* (x y ... z) (a b ... c))
Dependiendo de la condición, que evalúa todos los subformularios en el primer o segundo , pero solo devuelve el último.
Offtopic leve: parece que la variable 'num' es una variable especial/dinámica (es decir, global). Lo más probable es que no necesites uno. –
¿En qué dialecto Lisp está escrito este código? –