Qualcuno esperto in lisp può spiegarmi questa barzelletta? Ho letto alcuni linguaggi di programmazione funzionale e so che CAR / CDR significano i contenuti del registro dell'indirizzo / decremento ma ancora non capisco bene l'umorismo.
Qualcuno esperto in lisp può spiegarmi questa barzelletta? Ho letto alcuni linguaggi di programmazione funzionale e so che CAR / CDR significano i contenuti del registro dell'indirizzo / decremento ma ancora non capisco bene l'umorismo.
Risposte:
In Lisp, un elemento della lista collegata è chiamato CONS. Si tratta di una struttura dati con due elementi, denominata CAR e CDR per ragioni storiche. (Alcuni programmatori Common Lisp preferiscono fare riferimento ad essi utilizzando 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 per paraurti che a volte vedi su vecchie auto malandate che dicono "L'altra mia macchina è una Porsche / BMW / ecc."
La mia risposta a questa battuta è sempre stata "La mia altra AUTO è un CADR. CDR non è affatto un'AUTOMOBILE".
(rplacd a (car a))
che manifestamente non lo farà. :) Common LISP non è Haskell. Ma grazie per la spiegazione. +1.
car
è first
". :)
Sì, sicuramente uno scherzo da geek.
I nomi vengono dall'IBM 704, ma non è uno scherzo.
La battuta è un (brutto) gioco di parole "l'altra mia macchina è una ___". Ma la barzelletta riguarda la ricorsione.
Quando si esegue un ciclo / manipolazione / selezione / invoca / altro in lisp si usa una combinazione di car (il primo elemento nell'elenco) e cdr (il resto dell'elenco) per destreggiarsi tra le funzioni.
Quindi hai una macchina, ma l'altra tua macchina è il tuo CDR perché puoi sempre ottenere un'auto da un CDR poiché il CDR è sempre (in ricorsione) più elementi. Prendilo? Ridi ancora?
Probabilmente dovrai imparare il lisp per ridacchiare un po ', oppure no. Ovviamente, a quel punto, probabilmente ti ritroverai a ridere a caso senza una ragione apparente perché:
Lisp ti rende pazzo.
// Venendo da schema
schema ha pochissime strutture di dati, uno di loro è una tupla: '(first . second)
. In questo caso, car
è il primo elemento ed cdr
è il secondo. Questo costrutto può essere esteso per creare elenchi, alberi e altre strutture.
La battuta non è molto divertente.
(first . second)
. L'elenco '(first second)
è composto da due tuple, così:(cons first (cons second null))