typestar

Fundamentos del lenguaje

27 pasos en 9 series de Lisp.

Common Lisp es el lenguaje donde el programa y sus datos comparten una sola forma: todo es una expresión, los paréntesis son el árbol de sintaxis dicho en voz alta, y el REPL es el centro del flujo de trabajo desde antes de que existiera casi cualquier otro lenguaje. El dialecto de aquí es Common Lisp ANSI portable, tal como lo compila SBCL — defun y let, las operaciones de listas que le dieron su nombre al lenguaje, las funciones genéricas de CLOS y las macros con las que el lenguaje se extiende a sí mismo.

Este tour cubre el núcleo de trabajo: vinculaciones y funciones, celdas cons y el quote, cond y recursión, el trío de orden superior mapcar/reduce/remove-if, tablas hash y listas de asociación, estructuras y CLOS, el lenguajito de format y por último defmacro con comilla inversa (backquote). El bis entrega programas completos. Cada fragmento compila bajo SBCL con todas las advertencias activadas, y el bis corre de principio a fin.

Empieza este tour

Valores y vinculaciones

  • defparameter y defvarDos formas de crear un global: defparameter sobrescribe, defvar se abstiene.
  • let y let*let vincula todos sus nombres a la vez; let* construye cada uno sobre el anterior.
  • Cadenas y númerosUnir cadenas y dividir números, donde Lisp conserva respuestas exactas por defecto.

Listas y celdas cons

  • Celdas consToda lista de Lisp es en realidad una sucesión de celdas cons de dos ranuras.
  • Construir listasHacer crecer una lista de pistas con push y luego enderezarla con reverse y append.
  • El quoteUn quote es la diferencia entre ejecutar (+ 2 3) y quedarte con la expresión.

Control de flujo

  • cond, when y unlesscond es el condicional de varias ramas; when y unless cubren los casos de un solo lado.
  • Despacho con casecase elige una rama comparando un valor con claves literales mediante eql.
  • Fundamentos de recursiónDos recursiones sobre la misma lista de lluvias, distintas en dónde se acumula la respuesta.

Funciones

  • defun y docstringsDefine una función de ritmo de caminata con su docstring y la llama con y sin el argumento opcional.
  • Argumentos por palabra claveUna función brew-tea con tres parámetros &key, llamada de tres maneras.
  • Valores múltiplesParte un tiempo de vuelta en minutos y segundos, y luego contrasta floor con truncate.

Orden superior

  • mapcar y reduceSuma el impuesto a una lista de precios del carrito con mapcar y los totaliza con reduce.
  • Filtrar con predicadosFiltra una lista de conteos de aves de tres formas y cuenta una cuarta, sin tocar la lista original.
  • sort con :keyOrdena un alist de quesos por peso y por nombre, copiando primero porque sort es destructivo.

Colecciones

  • Tablas hashUn estante de especias con claves de cadena, que necesita :test 'equal y no el predicado por defecto.
  • Alists y plistsBusca un código de área en un alist y un campo en un plist, y dice cuándo conviene cada forma.
  • Vectores y arreglosLee temperaturas diarias de un literal #(...) y escribe en un arreglo creado con make-array.

Estructuras y CLOS

  • defstructdefstruct declara un registro y genera gratis su constructor, sus accesores y su copiador.
  • defclassUna clase de CLOS deletrea a mano el :initarg, el :accessor y el :initform de cada ranura.
  • Funciones genéricasUn defgeneric, dos cuerpos defmethod, y la clase del argumento elige cuál de los dos corre.

Format y macros

  • Directivas de formatLas directivas de format son un lenguaje en miniatura para armar cadenas.
  • defmacroUna macro reescribe el fuente en otro fuente antes de que se evalúe nada de él.
  • Plantillas con backquoteLa comilla inversa arma una plantilla de lista; la coma y la coma-arroba llenan los huecos.

Bis

  • word_freq.lispCuenta la frecuencia de las palabras de un pasaje incluido e imprime una tabla ordenada.
  • grade_report.lispConvierte una lista de estudiantes y sus notas en calificaciones por persona y un resumen del curso.
  • temp_stats.lispInforma una semana de máximas diarias con mínimo, máximo, media y un gráfico de barras en texto.

Los otros tours de Lisp