“我的其他车是cdr”是什么意思?

时间:2009-12-08 05:26:17

标签: lisp cons cdr

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

3 个答案:

答案 0 :(得分:131)

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

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

我的response对这个笑话一直是“我的其他CAR是CADR.CDR根本不是CAR。”

答案 1 :(得分:32)

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

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

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

当你在lisp中循环/操作/ select / invoke / more时,你可以使用car(列表中的第一个元素)和cdr(列表的其余部分)的组合来兼顾函数。

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

你可能不得不学习口齿不清实际轻笑一下。当然,到那时,你可能会发现自己随意地轻笑,因为:

Lisp让你变得循环。

答案 2 :(得分:14)

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