inteligencia - listas en lisp ejemplos
¿Cómo puedo aumentar o disminuir un número en Common Lisp? (1)
¿Cuál es la forma idiomática de Common Lisp para aumentar / disminuir números y / o variables numéricas?
Use las funciones "+" o "-" incorporadas, o sus abreviaturas "1+" o "1-", si solo desea usar el resultado, sin modificar el número original (el argumento). Si desea modificar el lugar original (que contiene un número), utilice las funciones "incf" o "decf" integradas.
Usando el operador de suma:
(setf num 41)
(+ 1 num) ; returns 42, does not modify num
(+ num 1) ; returns 42, does not modify num
(- num 1) ; returns 40, does not modify num
(- 1 num) ; NOTE: returns -40, since a - b is not the same as b - a
O, si lo prefiere, puede usar la siguiente mano corta:
(1+ num) ; returns 42, does not modify num.
(1- num) ; returns 40, does not modify num.
Tenga en cuenta que la especificación Common Lisp define que las dos formas anteriores tienen un significado equivalente y sugiere que las implementaciones las hacen equivalentes en rendimiento. Si bien esta es una sugerencia, según los expertos de Lisp, cualquier implementación "que se respete" no debería ver ninguna diferencia de rendimiento.
Si desea actualizar num (no solo obtener 1 + su valor), use "incf":
(setf num 41)
(incf num) ; returns 42, and num is now 42.
(setf num 41)
(decf num) ; returns 40, and num is now 40.
(incf 41) ; FAIL! Can''t modify a literal
NOTA:
También puedes usar incf / decf para incrementar (disminuir) en más de 1 unidad:
(setf foo 40)
(incf foo 2.5) ; returns 42.5, and foo is now 42.5
Para obtener más información, consulte la Common Lisp Hyperspec: 1+ incf/decf