2009-12-08 16 views
84

Qualcuno esperto in fonia può spiegare questo scherzo a me? Ho letto alcuni linguaggi di programmazione funzionale e so che CAR/CDR significa Contenuti del registro indirizzi/decrementi, ma ancora non capisco l'umorismo.Che cosa significa "l'altra mia auto è un cdr"?

+10

inizia a "intrigare" un po 'e poi capirai. Hahaha. è meglio di un adesivo per il paraurti che dice "questo programmatore si ferma a tutte le raccolte di spazzatura". – gonzobrains

+8

Circa mezz'ora dopo che questa domanda era collegata a https://news.ycombinator.com/item?id=14416846 è stata messa in attesa. È una domanda di 8 anni. Fastidiosamente, non posso discutere contro lo stato di attesa, ma non mi piace l'atmosfera di metterlo in attesa * ora *. –

+0

@ i336_ per la [meta discussione] (https://meta.stackoverflow.com/questions/250060/should-i-flag-old-questions-that-ought-to-be-closed), è chiuso per impedire nuove risposte dall'intasamento della coda di revisione. – Andrew

risposta

123

In Lisp, un elemento dell'elenco collegato è denominato CONS. Si tratta di una struttura dati con due elementi, denominati CAR e CDR per ragioni storiche. (Alcuni programmatori Common Lisp preferiscono riferirsi a loro usando le funzioni FIRST e REST, mentre altri come CAR e CDR perché si adattano bene alle versioni precomposte come (CADR x) ≡ (CAR (CDR x)).

Lo scherzo è una parodia degli adesivi paraurti che a volte vedi su vecchie auto battute dicendo "La mia altra auto è una Porsche/BMW/ecc."

Il mio response a questo scherzo è sempre stato "La mia altra macchina è un CADR. CDR non è una macchina a tutti."

+25

+1 per avere una risposta abituale. :) – Kobi

+1

molto bello, ma non è vero. Non dopo '(rplacd a (auto a))' manifestamente no. :) LISP comune non è Haskell. Ma grazie per la spiegazione. +1. –

+0

@WillNess Common Lisp non è un LISP comune. –

13

// Venendo da Schema
programma ha pochissime strutture di dati, uno di loro è una tupla: '(first . second). In questo caso, car è il primo elemento e cdr è il secondo. Questo costrutto può essere esteso per creare elenchi, alberi e altre strutture.
Lo scherzo non è molto divertente.

+0

Oh uomo ... Se vedessi un adesivo per paraurti con quella barzelletta, avrei completamente graffiato la parola "primario" nel lato con una chiave. – Josh

+2

+1, lo scherzo non è molto divertente: P – Russell

+1

Non sarebbe la tupla essere '(primo, secondo)? – Ken

32

Sì, sicuramente uno scherzo geek.

I nomi provengono dalla IBM 704, ma non è lo scherzo.

Lo scherzo è (cattivo) gioco di parole su "l'altra mia auto è un ___". Ma l'in-joke parla di ricorsione.

Quando si esegue il loop/manipola/seleziona/invoca/più in lisp, si utilizza una combinazione di auto (il primo elemento nell'elenco) e cdr (il resto dell'elenco) per gestire le funzioni.

Quindi hai una macchina, ma la tua altra macchina è il tuo cdr perché puoi sempre prendere una macchina da un cdr dato che il cdr è sempre (in ricorsione) più elementi. Prendilo? Ridi ancora?

Probabilmente dovrai imparare la chiarezza per ridacchiare o meno. Naturalmente, a quel punto, probabilmente ti ritroverai a ridacchiare a caso senza motivo apparente perché:

Lisp ti rende ansioso.

+2

E con il tuo ultimo respiro, è iniziata un'altra partita. – zxq9