首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Lisp中什么时候使用‘(或引号)?

在Lisp中什么时候使用‘(或引号)?
EN

Stack Overflow用户
提问于 2008-09-25 17:59:42
回答 5查看 43.7K关注 0票数 126

在读完一本Lisp入门书籍的主要部分之后,我仍然不能理解特殊的运算符(quote) (或等效的')函数是做什么的,但是我所看到的Lisp代码中到处都是这个函数。

是干什么的呢?

EN

回答 5

Stack Overflow用户

发布于 2008-09-25 18:02:29

上面写着“不要评估我”。例如,如果你想使用一个列表作为数据,而不是代码,你应该在它前面加一个引号。例如,

(print '(+ 3 4))打印"(+ 3 4)",而(print (+ 3 4))打印"7“

票数 57
EN

Stack Overflow用户

发布于 2009-02-23 16:49:35

其他人已经很好地回答了这个问题,Matthias Benkard提出了一个很好的警告。

请勿使用QUOTE创建稍后要修改的列表。该规范允许编译器将带引号的列表视为常量。通常,编译器会通过在内存中为常量创建单个值,然后从常量出现的所有位置引用该单个值来优化常量。换句话说,它可以像对待匿名全局变量一样对待常量。

这可能会导致明显的问题。如果你修改了一个常量,它很可能会在完全不相关的代码中修改相同常量的其他用法。例如,你可以在一些函数中将一些变量与'(1 1)进行比较,而在一个完全不同的函数中,以'(1 1)开始一个列表,然后向其添加更多内容。运行这些函数后,您可能会发现第一个函数不再正确匹配,因为它现在尝试将变量与第二个函数返回的'(1 1 2 3 5 8 13)进行比较。这两个函数完全不相关,但由于常量的使用,它们相互影响。甚至可能发生更疯狂的坏结果,比如一个完全正常的列表迭代突然无限循环。

当您需要一个常量列表时,例如用于比较,请使用quote。当您要修改结果时使用list。

票数 19
EN

Stack Overflow用户

发布于 2008-09-25 18:04:28

引用阻止表单的执行或评估,而是将其转换为数据。通常,您可以通过对数据求值来执行数据。

quote创建列表数据结构,例如,以下内容等效:

(quote a)
'a

它还可以用于创建列表(或树):

(quote (1 2 3))
'(1 2 3)

您最好是在lisp上获得一本介绍性书籍,比如Practical Common Lisp (可以在线阅读)。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/134887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档