90

任何精通 lisp 的人都可以向我解释这个笑话吗?我已经阅读了一些函数式编程语言,并且知道 CAR/CDR 表示地址/递减寄存器的内容,但我仍然不太了解其中的幽默。

4

3 回答 3

137

在 Lisp 中,链表元素称为 CONS。它是一种具有两个元素的数据结构,由于历史原因,称为 CAR 和 CDR。(一些 Common Lisp 程序员更喜欢使用 FIRST 和 REST 函数来引用它们,而其他人则喜欢 CAR 和 CDR,因为它们与 (CADR x) ≡ (CAR (CDR x)) 等预先组合的版本非常吻合。

这个笑话是对你有时在破旧汽车上看到的保险杠贴纸的模仿,上面写着“我的另一辆车是保时捷/宝马等”。

对这个笑话的回应一直是“我的另一辆车是 CADR。CDR 根本不是 CAR。”

于 2009-12-08T05:45:22.493 回答
34

是的,绝对是一个极客笑话。

这些名称来自 IBM 704,但这不是玩笑。

这个笑话是(坏的)双关语“我的另一辆车是___”。但笑话是关于递归的。

当您在 lisp 中循环/操作/选择/调用/更多时,您使用 car (列表中的第一个元素)和 cdr (列表的其余部分)的组合来处理函数。

所以你有一辆车,但你的另一辆车是你的 cdr,因为你总是可以从 cdr 得到一辆车,因为 cdr 总是(递归)更多元素。得到它?还笑吗?

您可能必须学习 lisp 才能真正轻笑,或者不笑。当然,到那时,您可能会发现自己无缘无故地轻笑,因为:

Lisp 让你发呆。

于 2009-12-08T06:05:40.023 回答
14

//来自Scheme
Scheme的数据结构很少,其中一个是元组:'(first . second). 在这种情况下,car是第一个元素,cdr是第二个。可以扩展此构造以创建列表、树和其他结构。
这个笑话不太好笑。

于 2009-12-08T05:30:30.080 回答