typestar

Celdas cons en Lisp

Toda lista de Lisp es en realidad una sucesión de celdas cons de dos ranuras.

;; a cons is one pair of slots: car on the left, cdr on the right
(defparameter *leg* (cons 'north 12))
(format t "head ~a for ~a blocks~%" (car *leg*) (cdr *leg*))

;; a list is conses chained through the cdr, with nil closing the chain
(defparameter *stops* (cons "market" (cons "union" (cons "civic" nil))))
(format t "first stop ~a, then ~a~%" (first *stops*) (rest *stops*))
(format t "hand-built but still a list: ~a~%"
        (equal *stops* (list "market" "union" "civic")))

;; a cdr that is not a list prints with a dot between the two halves
(format t "dotted pair: ~a~%" (cons 'latitude 37.77))

Cómo funciona

  1. (cons 'north 12) arma un solo par, que se lee de vuelta con car y cdr.
  2. Anidar tres llamadas a cons que terminan en nil construye una lista equal a (list "market" "union" "civic").
  3. (cons 'latitude 37.77) tiene un cdr que no es lista, así que se imprime como par punteado.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
12
Caracteres a escribir
598
Tokens
80
Ritmo de tres estrellas
75 tpm

Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 64 segundos.

Escribe este fragmento

Paso 1 de 3 en Listas y celdas cons; paso 4 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →