Lisp 你有记忆卡和cdr的意思的助记符吗?

Lisp 你有记忆卡和cdr的意思的助记符吗?,lisp,elisp,common-lisp,Lisp,Elisp,Common Lisp,我的大部分Lisp经验来自Elisp。因此,我发现自己只是偶尔写Lisp。当我回到它的时候,我常常忘记了car和cdr之间的区别,需要引用文档来唤醒我的记忆 您使用哪种聪明的助记符来记住Lisp函数之间的差异,这些函数的命名根来自(car、cdr、cadr、caar、cddr等) 此外,为什么命名良好的first和rest别名作为car和cdr的惯用替代品没有获得更多吸引力 更新:我知道的实际定义及其发音方式。请只写助记符 完全披露:这个问题不完全适合我。这是为了帮助其他Lisp新手克服一些最初

我的大部分Lisp经验来自Elisp。因此,我发现自己只是偶尔写Lisp。当我回到它的时候,我常常忘记了
car
cdr
之间的区别,需要引用文档来唤醒我的记忆

您使用哪种聪明的助记符来记住Lisp函数之间的差异,这些函数的命名根来自(car、cdr、cadr、caar、cddr等)

此外,为什么命名良好的
first
rest
别名作为
car
cdr
的惯用替代品没有获得更多吸引力

更新:我知道的实际定义及其发音方式。请只写助记符


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

我没有记忆car/cdr的助记符,尽管它们是按字母顺序排列的(
a
d
之前,因此
car
第一个

至于他们为什么坚持(比如
第一个
其余的
)?很大一部分可能只是动力,但另一部分是你已经写过的。您可以轻松地为它们编写合成函数:

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

我没有car和cdr的助记符。我的意思是,它们只有两个,如果你使用Lisp,在我看来你会知道的。(见鬼,我甚至不使用Lisp,我还记得。)

除了构图方便外,car和cdr与first和rest相比还有以下优点:(1)更短,(2)彼此长度相同,(3)它们出现得更早。

至少对我来说,“car”和“cdr”是你刚学的东西,就像“left”和“right”这两个词的发音一样

只有当解构的对象是列表时,“first”和“rest”才是助记符。如果它是一个实际的cons(即,一个虚线对),它们不会有帮助

它们之所以被卡住,是因为在大约50年前,当LISP第一次被开发出来的时候,没有其他东西。所有的文章,所有的书,所有CAR和CDR使用的代码,每个人都习惯了它们。

它们代表“地址寄存器的内容”和“减量寄存器的内容”,这些术语源自IBM 704机器体系结构。这对你没多大帮助


这真的很蹩脚,但既然没有其他人提出任何建议

汽车对我来说是驱动力,所以它是第一位的。cdr是守车;它在后面


你看,我告诉过你它是跛脚的。

我实际上很少看到
汽车
cdr
,更多的时候我看到
首先
休息
。因此,我不能同意那些被命名的人没有获得吸引力。

如果你不在乎习惯用语,那么先用后用。car和cdr的优点是可以组合成caddr、cddr等组合,如果您觉得有用的话


否则,car是第一个,并且是两个词中按字母顺序排列的第一个。

在car和cdr这两个词中,car是我最先听到的一个。

我使用的助记符是:

汽车-复制Alpha位置并返回

CDR-复制树突(树状部分-无根)并返回

我刚开始尝试Lisp,但希望它适合我

我倾向于认为列表的开头是alpha或root位置

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

另一个例子来自罗伯特·史密斯:

CAR-“细胞前区”

CDR-“细胞的背侧区域”

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

来自Lisp的括号太多了…(…或者他们这么说!),作者:罗伯特·史密斯,2010年11月7日

我知道这与首字母缩略词的原意无关,但就连史蒂夫·拉塞尔(Steve Russell)也说:

“由于一次不幸的暂时灵感缺失,我们无法为列表节点中的2个指针想出除“地址”和“减量”之外的任何其他名称,因此我们将函数CAR称为“寄存器地址的内容”,将函数CDR称为“寄存器减量的内容”

几个月后,我们用LISP上了几节课,意识到“first”和“rest”是更好的名字,我们(John McCarthy,我和AI项目的其他一些人)试图让人们使用它们

唉,太晚了!我们根本无法让它粘住。所以我们有了汽车和CDR。”


你可以使用first和rest来避免这个问题。

这本书《Lisp的温和介绍》很好地解释了诸如

卡达达

从右侧开始向左移动(ADDDAADD),因此上面的是(其中
->
是“然后”):
CDR->CDR->CAR->CAR->CDR->CDR->CDR->CAR


CAR
&
CDR
被优先于
firt
rest
的原因(我认为)是因为它们可以被链接成上述函数。

上面这本书的全部参考文献是David S.Touretzky的《Common Lisp符号计算的温和介绍》。可从以下地点获得(2019年11月):

我(很晚)对CAR和CDR助记符的建议是:

想象一下CAR获得的列表中的第一个元素,用a表示,但用一种看起来像D的镜像的字体。这个字符指向(即字符的曲面指向)C'omenteme