Que signifie «mon autre voiture est un CDR»?

89

Quelqu'un peut-il bien m'expliquer cette blague? J'ai fait quelques lectures sur les langages de programmation fonctionnels et je sais que CAR / CDR signifie Contenu du registre d'adresse / décrémentation, mais je ne comprends toujours pas vraiment l'humour.

CaptainCasey
la source
10
commencez à "intriguer" un peu et alors vous comprendrez. hahaha. c'est mieux qu'un autocollant de pare-chocs qui dit "ce programmeur s'arrête à tous les ramassages d'ordures."
gonzobrains du
8
Environ une demi-heure après la mise en relation de cette question depuis news.ycombinator.com/item?id=14416846, elle a été mise en attente. C'est une question vieille de 8 ans. Malheureusement, je ne peux pas contester le statut de mise en attente, mais je n'aime pas l'ambiance de le mettre en attente maintenant .
i336_
@ i336_ par la méta-discussion , il est fermé pour éviter que de nouvelles réponses ne bloquent la file d'attente de révision.
Andrew
2
N'y a-t-il pas d'autres raisons de blocage? Basé sur l'opinion est ... faux
Entendu
6
Ne devrait-il pas être protégé à la place?
Federico klez Culloca

Réponses:

134

En Lisp, un élément de liste chaînée est appelé un CONS. Il s'agit d'une structure de données à deux éléments, appelée CAR et CDR pour des raisons historiques. (Certains programmeurs Common Lisp préfèrent s'y référer en utilisant les fonctions FIRST et REST, tandis que d'autres aiment CAR et CDR car ils correspondent bien aux versions précomposées telles que (CADR x) ≡ (CAR (CDR x)).

La blague est une parodie des autocollants de pare-chocs que vous voyez parfois sur de vieilles voitures battues en disant "Mon autre voiture est une Porsche / BMW / etc."

Ma réponse à cette blague a toujours été "Mon autre CAR est un CADR. Le CDR n'est pas du tout un CAR".

Peter S. Housel
la source
1
très joli, mais pas vrai. Pas après (rplacd a (car a))cela, manifestement pas. :) Common LISP n'est pas Haskell. Mais merci pour l'explication. +1.
Will Ness
2
Je ne voulais pas expliquer ma blague, mais ... le fait est que l' opération CDR n'est pas une opération CAR ; c'est un problème distinct de savoir si les valeurs sont équivalentes ou non via RPLACD ou autre.
Peter S. Housel
1
Et aussi, CDR sonne comme le nom d'une voiture de sport, faisant écho à TVR ou GT-R, de sorte que l'on puisse lire le texte sans même se rendre compte de la signification plus profonde de LISP-y.
grkvlt
4
Au cas où quelqu'un voudrait le savoir, CAR signifie Contenu de la partie Adresse du numéro de registre , et CDR signifie Contenu de la partie Décrément du numéro de registre . Merci, Wikipedia !
kojiro
1
Que diriez-vous de "Mon autre carest first". :)
Kaz
34

Oui, certainement une blague de geek.

Les noms viennent de l'IBM 704, mais ce n'est pas la blague.

La blague est un (mauvais) jeu de mots sur "mon autre voiture est une ___". Mais la blague concerne la récursivité.

Lorsque vous bouclez / manipulez / sélectionnez / invoquez / plus dans lisp, vous utilisez une combinaison de car (le premier élément de la liste) et de cdr (le reste de la liste) pour jongler avec les fonctions.

Donc, vous avez une voiture, mais votre autre voiture est votre cdr car vous pouvez toujours obtenir une voiture d'un cdr puisque le cdr est toujours (en récursivité) plus d'éléments. Tu piges? Riez encore?

Vous devrez probablement apprendre le lisp pour rire un peu, ou pas. Bien sûr, d'ici là, vous vous retrouverez probablement à rire au hasard sans raison apparente parce que:

Lisp vous rend fou.

Zen
la source
2
Et avec votre dernier souffle, un autre jeu a commencé.
zxq9
14

// venant de schéma
système a très peu de structures de données, l' un d'eux est un tuple: '(first . second). Dans ce cas, carest le premier élément, et cdrest le second. Cette construction peut être étendue pour créer des listes, des arbres et d'autres structures.
La blague n'est pas très drôle.

Kobi
la source
1
Le tuple ne serait-il pas '(premier. Deuxième)?
Ken
1
@Ken - encore une fois, je ne connais pas lisp, mais le schéma n'a pas une syntaxe aussi complexe. Même les listes sont faites de paires.
Kobi
3
En effet, il serait plus exact de dire que le tuple est (first . second). La liste '(first second)est composée de deux tuples, comme ceci:(cons first (cons second null))
mqp
1
Kobi: Je connais Lisp, et je ne suis pas sûr de ce que vous entendez par «syntaxe complexe». La syntaxe pointillée est la façon dont vous écrivez des paires en Lisp, y compris Scheme: gnu.org/software/mit-scheme/documentation/mit-scheme-ref/… . Le cdr de (premier second) est (second), pas second.
Ken
3
Alors, maintenant, nous sommes rejetés pour avoir été corrigés? tant pis. Le soleil brillera.
Kobi