Lo primero agradecer a Paul Graham, Peter Seeibel, Hennessey, Winston & Horn el esfuerzo empleado en escribir las preciosas joyas que me han introducido en este maravilloso lenguaje.
En segundo lugar, comentar que en estas páginas encontraréis mis reflexiones sobre programación en Common Lisp y algunas explicaciones que ayudarán a comprender porqué he decidido programar, de ahora en adelante siempre que me sea posible, en este lenguaje. ¡Me alegro de poder tomar esta decisión!
Ejemplo de algo que he querido hacer y que no se me ha ocurrido hacerlo de este modo tan genial(On Lisp pag.65):
(defun memoize(fn)
(let ((cache (make-hash-table :test #'equal)))
#'(lambda(&rest args)
(multiple-value-bind (val win)(gethash args cache)
(if win
val
(setf (gethash args cache)
(apply fn args)))))))
La función MEMOIZE toma como argumento una función, fn, y devuelve una función similar en resultados al valor de la función proporcionada, fn, diferenciándose en los tiempos de respuesta entre la primera y la segunda utilización de esta nueva función devuelta, ya que, en su primer uso se almacena el resultado en una tabla, de manera que en las siguientes aplicaciones la respuesta se obtiene de mucho más rápidamente. Esto es útil cuando el cálculo de la función lleva mucho tiempo.
Observe la generalidad de esta función, puesto que se aplica a cualquier función, de manera que se resuelve el problema de manera general (y genial).
Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional.