您是否有一个用于记住car和cdr含义的助记符?

问题描述 投票:15回答:12

[我的大部分Lisp经验都来自Elisp。因此,我发现自己只是偶尔写Lisp。当我回到它的时候,我常常忘记了carcdr之间的区别,需要参考文档来慢跑我的记忆。

您使用哪种聪明的助记符来记住Lisp函数之间的区别,这些Lisp函数的命名根源于1954 era computer architectures(汽车,cdr,cadr,caar,cddr等)?

此外,为什么firstrest的别名不能作为carcdr的惯用替代品而获得更大的吸引力?

Update:我知道car and cdr的实际定义以及如何发音。请仅使用助记符。

完全公开:这个问题并不完全适合我。这是为了帮助其他Lisp新手克服一些最初的障碍。

lisp elisp common-lisp
12个回答
13
投票

两个词carcdr中,car是我听到的first


0
投票

您可以通过使用first和rest来避免此问题。


0
投票

[《 Lisp的温和入门》这本书很好地解释了像这样的大人物>>

CADDDAADDR

[从右侧开始向左移动(ADDDAADD),因此以上是(其中first为“然后”):rest

[->CDR->CDR->CAR->CAR->CDR->CDR->CDR->CAR优先于CARCDR的原因是(我认为),因为它们可以链接以形成上述功能。


0
投票

上面的书的完整参考是David S. Touretzky撰写的“ Common Lisp对符号计算的温和介绍”。可从以下日期(2019年11月)开始使用:firt


11
投票

这真是la脚,但由于没有其他人提出任何建议...

对我来说,开车是汽车,所以这是第一。 cdr是守车;它来了。

看,我告诉你这很la脚。


10
投票

我没有记住汽车/ cdr的助记符,尽管它们是字母的(carcdr之前,因此ad)。

关于他们为什么坚持(针对carfirst之类的东西?很大一部分可能只是动量,而另一部分是您已经写的。您可以轻松地为它们编写合成函数:

first

3
投票

它们代表“地址寄存器的内容”和“减量寄存器的内容”,它们是从IBM 704机器体系结构派生的术语。但这并不能帮助您!

请参见rest


1
投票

我没有用于汽车和cdr的助记符。我的意思是,只有这两个,如果您完全使用Lisp,在我看来,您就会知道。 (地狱,我什至不使用Lisp,我还记得。)

除了方便的合成之外,car和cdr相对于first和rest具有以下优点:(1)较短,(2)彼此相同的长度,(3)它们出现得较早。


1
投票

至少对我来说,“汽车”和“ cdr”是您刚刚学习的东西,例如“左”和“右”两个字的发音。

“ first”和“ rest”仅在要解构的对象是列表的情况下才是助记符。如果这是一个实际的缺点(例如,虚线对),它们将无济于事。

他们之所以坚持,是因为大约50年前LISP最初开发时,没有其他东西。所有文章,所有书籍,所有代码都使用CAR和CDR,并且每个人都习惯了。


1
投票

我使用的助记符是:

CAR-复制Alpha位置并返回

CDR-复制树突(树部分-没有根)并返回

我最近重新尝试使用Lisp,但希望这样适合。

[我倾向于将列表的开头视为alpha或根位置。

如果第一个位置是根,并且我习惯于看到二叉树(可以表示为列表),那么与树相关的单词似乎是有序的。 Dendrite的开头字母正确,而且似乎合适。它代表了没有根的树的最后一个。

[另一位来自罗伯特·史密斯:

CAR-“细胞的前区”

CDR-“细胞的背区”

“”我们可以得到单元格的第二部分。我们称此部分为背侧区域(为什么不后侧?背侧的含义在列表中更有意义,因为列表的背侧区域[1,2,3]是“接近末端”的部分,[2,3],而后部将是3)。“

来自Lisp,括号太多……(……或者这样说!)罗伯特·史密斯,2010年11月7日,

(caadar ...) -> (car (car (cdr (car ...))))

我知道这与最初的缩写无关,但甚至史蒂夫·罗素都说过:

“由于不幸的是灵感暂时消失,我们无法想到列表节点中2个指针的其他名称,除了” address“和” decrement“之外,因此我们将函数CAR称为” Address of Address of Contents“。寄存器”和“减少寄存器内容”的CDR。

[几个月后,在LISP中上了几节课,我们意识到“第一”和“其余”是更好的名字,我们(约翰·麦卡锡,我和AI项目的其余部分)试图让人们使用相反。

A,为时已晚!我们根本无法坚持下去。因此,我们有CAR和CDR。“

http://www.iwriteiam.nl/HaCAR_CDR.html


0
投票

我实际上很少看到Symbo1icsThe origin of CAR and CDR in LISP,更经常地我在代码中看到carcdr。因此,我不能同意那些名叫的人没有受到关注。


0
投票

如果您不习惯于习惯用法,请先休息。如果发现有用的话,car和cdr的优点是可以组合成caddr cddr等组合。

否则,汽车是第一位,并且按字母顺序是第二位。

© www.soinside.com 2019 - 2024. All rights reserved.