“我的另一辆车是 cdr”是什么意思?

有谁精通口齿不清,能给我解释一下这个笑话吗? 我读过一些关于函数式编程语言的文章,知道 CAR/CDR 意味着地址/减量寄存器的内容,但我还是不太明白其中的幽默。

39920 次浏览

//Coming from Scheme
Scheme has very few data structures, one of them is a tuple: '(first . second). In this case, car is the first element, and cdr is the second. This construct can be extended to create lists, trees, and other structures.
The joke isn't very funny.

In Lisp, a linked list element is called a CONS. It is a data structure with two elements, called the CAR and the CDR for historical reasons. (Some Common Lisp programmers prefer to refer to them using the FIRST and REST functions, while others like CAR and CDR because they fit well with the precomposed versions such as (CADR x) ≡ (CAR (CDR x)).

The joke is a parody of the bumper stickers you sometimes see on beat-up old cars saying "My other car is a Porsche/BMW/etc."

My response to this joke has always been "My other CAR is a CADR. CDR isn't a CAR at all."

Yes, definitely a geek joke.

The names come from the IBM 704, but that's not the joke.

The joke is (bad) pun on "my other car is a ___." But the in-joke is about recursion.

When you loop/manipulate/select/invoke/more in lisp you use a combination of car (the first element in the list) and cdr (the rest of the list) to juggle functions.

So you've got a car, but your other car is your cdr because you can always get a car from a cdr since the cdr is always (in recursion) more elements. Get it? Laugh yet?

You'll probably have to learn lisp to actually chuckle a bit, or not. Of course, by then, you'll probably find yourself chuckling randomly for no apparent reason because:

Lisp makes you loopy.