gpt4 book ai didi

lisp - Lisp 中的汽车和报价

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:07 25 4
gpt4 key购买 nike

我目前正在研究 Lisp,但我仍然没有得到报价。

为什么在 Lisp 中使用引号?

我在这里遇到了一个我很难理解的问题。

(car (car '((a b) c d))) 

以上给出A

但我不知道为什么结果是A,因为没有quote first car after.

最佳答案

quote 是一个运算符;只有当它是被评估的 Lisp 表达式的头部时,它的意义才会发挥作用。语法 'X 代表 (quote X):Lisp 阅读器将前缀撇号,后跟任何表示一个对象的语法单元 X 翻译成语法 (引用 X)quote 表达式在求值时返回语法 X 本身 作为值,而不是语法的值。例如 (quote (+ 1 2)) 返回三元素列表 (+ 1 2),而不是表达式 (+ 1 2) 的值3quote 有效地反射(reflect)程序的一段基于列表的语法作为值返回到正在运行的程序中。

在表达式中:

(car (car '((a b) c d)))

我们只是有一个嵌套函数应用到一个值:

(car (car value))

此值是 quote 表达式的结果,因此该值是对象 ((a b) c d)。该对象最初是一段包含在引号内的语法,但现在是传递给 car 函数的运行时值。内部 car 生成列表的第一个元素,返回 (a b)。此 (a b) 值被传递给外部 car,它检索 a

Lisp 提供了quote,因为它是一种谐音语言。在该语言中操作的主要数据结构具有打印符号,并且该打印符号也用于编写程序。因此,程序被理解为由数据结构构成。在这种语言中,假设您希望能够将任何数据结构用作文字。当然,这会造成混淆,因为数据使用与代码相同的符号,并且某些数据结构看起来像是有效语法。您需要一个运算符,您可以用一段语法来表示“这是文字数据;不要将其作为表达式求值,而只是它看起来像的数据”。

这与我们用英语谈论关于英语完全一样。我们必须使用引号——至少在我们写下这段谈话时。像这样的一句话:

A penny saved is a penny earned is a good old proverb.

写得不好。我们当然明白它的意思,因为我们的大脑善于处理歧义和错误,但它似乎在说一分钱一分货。我们需要报价:

"A penny saved is a penny earned" is a good old proverb.

看到了吗?引用说这句话不是我的句子的关系从句;它是我的句子所谈论的文本(恰好与我用来谈论它的语言相同)。这就是 Lisp 运算符被称为 quote 的原因:它与这种类型的引用有关。

关于lisp - Lisp 中的汽车和报价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39492326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com