O que significa “meu outro carro é um cdr”?

89

Alguém bem versado em ceceio pode me explicar essa piada? Já fiz algumas leituras sobre linguagens de programação funcional e sei que CAR / CDR significa Conteúdo de Registro de Endereço / Decremento, mas ainda não entendi direito o humor.

CaptainCasey
fonte
10
comece a "planejar" um pouco e então você entenderá. hahaha. é melhor do que um adesivo de pára-choque que diz "este programador pára em todas as coletas de lixo."
gonzobrains
8
Aproximadamente meia hora após o link desta pergunta de news.ycombinator.com/item?id=14416846, ela foi colocada em espera. É uma pergunta de 8 anos. Irritantemente, não posso argumentar contra o status em espera, mas não gosto da vibração de colocá-lo em espera agora .
i336_
@ i336_ de acordo com a meta discussão , está fechado para evitar que novas respostas obstruam a fila de revisão.
Andrew
2
Não há outras razões de espera? Baseado em opinião é ... errado
Entendu
6
Não deveria ser protegido em vez disso?
Federico klez Culloca

Respostas:

134

Em Lisp, um elemento de lista vinculada é chamado de CONS. É uma estrutura de dados com dois elementos, denominados CAR e CDR por motivos históricos. (Alguns programadores do Common Lisp preferem referir-se a eles usando as funções FIRST e REST, enquanto outros, como CAR e CDR, porque se adaptam bem às versões pré-compostas, como (CADR x) ≡ (CAR (CDR x)).

A piada é uma paródia dos adesivos que às vezes vemos em carros velhos e surrados dizendo "Meu outro carro é um Porsche / BMW / etc."

Minha resposta a essa piada sempre foi "Meu outro CAR é um CADR. CDR não é um CAR de forma alguma."

Peter S. Housel
fonte
1
muito bom, mas não é verdade. Não depois de (rplacd a (car a))manifestamente não. :) Common LISP não é Haskell. Mas obrigado pela explicação. +1.
Will Ness
2
Não queria explicar minha piada, mas ... a questão é que a operação de CDR não é uma operação de CAR ; essa é uma questão separada de se os valores são ou não equivalentes via RPLACD ou qualquer outro.
Peter S. Housel
1
E também, CDR soa como o nome de um carro esporte, ecoando TVR ou GT-R, então alguém poderia ler o texto e nem mesmo perceber o significado mais profundo, LISP-y.
grkvlt
4
Caso alguém queira saber, CAR significa Conteúdo da parte Endereço do número do Registro , e CDR significa Conteúdo da parte Decremento do número do Registro . Obrigado, Wikipedia !
kojiro
1
Que tal "Meu outro caré first". :)
Kaz
34

Sim, definitivamente uma piada geek.

Os nomes vêm do IBM 704, mas essa não é a piada.

A piada é um trocadilho (mau) sobre "meu outro carro é um ___." Mas a piada interna é sobre recursão.

Quando você faz um loop / manipula / seleciona / invoca / mais em lisp, você usa uma combinação de carro (o primeiro elemento da lista) e cdr (o resto da lista) para manipular funções.

Então você tem um carro, mas seu outro carro é seu cdr, porque você sempre pode obter um carro de um cdr, já que o cdr é sempre (em recursão) mais elementos. Pegue? Rir ainda?

Você provavelmente terá que aprender a ceceitar para realmente rir um pouco, ou não. É claro que, a essa altura, você provavelmente se pegará rindo aleatoriamente sem motivo aparente porque:

Lisp deixa você maluco.

zen
fonte
2
E com seu último suspiro, outro jogo começou.
zxq9 de
14

// Vindo do Esquema
Esquema tem muito poucas estruturas de dados, um deles é uma tupla: '(first . second). Nesse caso, caré o primeiro elemento e cdré o segundo. Essa construção pode ser estendida para criar listas, árvores e outras estruturas.
A piada não é muito engraçada.

Kobi
fonte
1
A tupla não seria '(primeiro. Segundo)?
Ken
1
@Ken - de novo, não sei lisp, mas o esquema não tem uma sintaxe tão complexa. Mesmo as listas são feitas de pares.
Kobi
3
Na verdade, seria mais correto dizer que a tupla é (first . second). A lista '(first second)é composta por duas tuplas, como esta:(cons first (cons second null))
mqp
1
Kobi: Eu conheço Lisp e não tenho certeza do que você entende por "sintaxe complexa". A sintaxe pontilhada é como você escreve pares em Lisp, incluindo Scheme: gnu.org/software/mit-scheme/documentation/mit-scheme-ref/… . O cdr de (primeiro segundo) é (segundo), não segundo.
Ken
2
Então, agora somos reprovados por termos sido corrigidos? Ah bem. O sol vai brilhar.
Kobi