¿Cuál es la forma idiomática Common Lisp forma de aumentar/disminuir números y/o variables numéricas?¿Cómo incremento o disminuyo un número en Common Lisp?
Respuesta
Utilice las funciones incorporadas "+" o "-", o su abreviatura "1+" o "1-", si solo quiere 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 incorporadas "incf" o "decf".
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 utilizar el siguiente corto la mano:
(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 las dos formas anteriores a ser equivalente en significado, y sugiere que las implementaciones los hacen equivalentes en el rendimiento. Si bien esta es una sugerencia, según los expertos de Lisp, cualquier implementación "que se precie" no verá ninguna diferencia en el rendimiento.
Si se quiere actualizar num (no sólo obtener 1 + su valor), a continuación, utilizar "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 puede utilizar incf/DECF de incremento (decremento) 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 Lisp hyperspec común: 1+ incf/decf
- 1. Asociación en Common Lisp
- 2. Secuencias en Common Lisp?
- 3. Common Lisp a Lisp-n?
- 4. Webdevelopment en Common Lisp
- 5. Best Common Lisp IDE
- 6. Cómo implementar Multi-Threads en Common Lisp
- 7. Eliminación de un tipo en Common Lisp
- 8. Predijo Common Lisp
- 9. Renombrando lambda en Common Lisp
- 10. División entera en Common Lisp?
- 11. Dibujando árboles en Common Lisp
- 12. Programación de Common Lisp Parallel
- 13. ¿Common Lisp tiene un gran legado? (¿Es mejor aprender Common Lisp o una variante más moderna como Scheme?)
- 14. Especificadores de tipo Common Lisp
- 15. Desenrolle/argumentos splat en Common Lisp
- 16. Cómo hacer coincidencia de patrones en Common Lisp
- 17. Ejercicios de Common Lisp/Problemas
- 18. definiendo setf-expanders en Common Lisp
- 19. Palabra clave programática Common Lisp
- 20. Common Lisp definición del paquete
- 21. Common Lisp en Heroku con Hunchentoot?
- 22. Uso de etiquetas en Common Lisp
- 23. Restablecer el estado en Common Lisp
- 24. raspando una tabla HTML en Common Lisp?
- 25. LET versus LET * en Common Lisp
- 26. Función de persistencia en Common Lisp
- 27. Representational State Transfer (REST) en Common Lisp
- 28. Introspección de clase en Common Lisp
- 29. Implementación del conjunto Mandelbrot en Common Lisp
- 30. ¿Hay alguna pelusa para Common Lisp o Chicken Scheme?