¿Qué significa “mi otro auto es un cdr”?

89

¿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.

Capitán Casey
fuente
10
empieza a "maquillar" un poco y entonces lo entenderás. jajaja. es mejor que una calcomanía que diga "este programador se detiene en todas las recolecciones de basura".
Gonzobrains
8
Aproximadamente media hora después de que se vincule esta pregunta desde news.ycombinator.com/item?id=14416846 , se puso en espera. Es una pregunta de 8 años. Es molesto, no puedo argumentar contra el estado de espera, pero no me gusta la sensación de ponerlo en espera ahora .
i336_
@ i336_ según la meta discusión , está cerrado para evitar que las nuevas respuestas obstruyan la cola de revisión.
Andrew
2
¿No hay otras razones de espera? La opinión basada es ... incorrecta
Entendu
6
¿No debería protegerse en su lugar?
Federico klez Culloca

Respuestas:

134

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".

Peter S. Housel
fuente
1
muy bonito, pero no es cierto. No después de (rplacd a (car a))que evidentemente no lo hará. :) Common LISP no es Haskell. Pero gracias por la explicacion. +1.
Will Ness
2
No quería explicar mi broma, pero ... el punto es que la operación CDR no es una operación CAR ; esa es una cuestión independiente de si los valores son equivalentes a través de RPLACD o lo que sea.
Peter S. Housel
1
Y también, CDR suena como el nombre de un automóvil deportivo, haciéndose eco de TVR o GT-R, por lo que uno podría leer el texto y ni siquiera darse cuenta del significado más profundo de LISP-y.
grkvlt
4
En caso de que alguien quiera saberlo, CAR significa Contenido de la parte de dirección del número de registro , y CDR significa Contenido de la parte de decremento del número de registro . ¡Gracias, Wikipedia !
kojiro
1
¿Qué tal "Mi otro cares first"? :)
Kaz
34

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.

zen
fuente
2
Y con tu último aliento, comenzó otro juego.
zxq9
14

// Desde Esquema
Esquema tiene muy pocas estructuras de datos, uno de ellos es una tupla: '(first . second). En este caso, cares el primer elemento y cdres el segundo. Esta construcción se puede ampliar para crear listas, árboles y otras estructuras.
La broma no es muy divertida.

Kobi
fuente
1
¿No sería la tupla '(primero, segundo)?
Ken
1
@Ken: de nuevo, no sé lisp, pero el esquema no tiene una sintaxis tan compleja. Incluso las listas están formadas por pares.
Kobi
3
De hecho, sería más exacto decir que la tupla es (first . second). La lista '(first second)se compone de dos tuplas, como esta:(cons first (cons second null))
mqp
1
Kobi: Conozco Lisp, y no estoy seguro de qué quieres decir con "sintaxis compleja". La sintaxis punteada es la forma de escribir pares en Lisp, incluido Scheme: gnu.org/software/mit-scheme/documentation/mit-scheme-ref/… . El cdr de (primer segundo) es (segundo), no segundo.
Ken
3
Entonces, ¿ahora nos votan negativamente por ser corregidos? Oh bien. El sol brillará.
Kobi