¿Alguien bien versado en lisp puede explicarme esta broma? He leído un poco sobre lenguajes de programación funcionales y sé que CAR / CDR significa Contenido de Dirección / Registro de Decremento, pero todavía no entiendo el humor.
¿Alguien bien versado en lisp puede explicarme esta broma? He leído un poco sobre lenguajes de programación funcionales y sé que CAR / CDR significa Contenido de Dirección / Registro de Decremento, pero todavía no entiendo el humor.
Respuestas:
En Lisp, un elemento de lista enlazada se llama CONS. Es una estructura de datos con dos elementos, llamados CAR y CDR por razones históricas. (Algunos programadores de Common Lisp prefieren referirse a ellos usando las funciones FIRST y REST, mientras que otros como CAR y CDR porque encajan bien con las versiones precompuestas como (CADR x) ≡ (CAR (CDR x)).
El chiste es una parodia de las pegatinas de parachoques que a veces ves en autos viejos destartalados que dicen "Mi otro auto es un Porsche / BMW / etc.".
Mi respuesta a esta broma siempre ha sido "Mi otro CAR es un CADR. CDR no es un CAR en absoluto".
(rplacd a (car a))
que evidentemente no lo hará. :) Common LISP no es Haskell. Pero gracias por la explicacion. +1.
car
es first
"? :)
Sí, definitivamente una broma geek.
Los nombres provienen del IBM 704, pero esa no es la broma.
La broma es un (mal) juego de palabras con "mi otro coche es un ___". Pero el chiste interno trata sobre la recursividad.
Cuando repites / manipulas / seleccionas / invocas / more en lisp, usas una combinación de car (el primer elemento de la lista) y cdr (el resto de la lista) para hacer malabares con las funciones.
Así que tienes un coche, pero tu otro coche es tu cdr porque siempre puedes obtener un coche de un cdr ya que el cdr es siempre (en recursividad) más elementos. ¿Consíguelo? Reír todavía?
Probablemente tendrás que aprender a cecear para reírte un poco, o no. Por supuesto, para entonces, probablemente te encontrarás riendo al azar sin razón aparente porque:
Lisp te vuelve loco.
// Desde Esquema
Esquema tiene muy pocas estructuras de datos, uno de ellos es una tupla: '(first . second)
. En este caso, car
es el primer elemento y cdr
es el segundo. Esta construcción se puede ampliar para crear listas, árboles y otras estructuras.
La broma no es muy divertida.
(first . second)
. La lista '(first second)
se compone de dos tuplas, como esta:(cons first (cons second null))