什么时候在Lisp中使用'(或引用)?

什么时候在Lisp中使用'(或引用)?

在通过介绍性的Lisp书的主要部分之后,我仍然无法理解特殊运算符(quote)(或等效的')函数的作用,但这已经是我见过的所有Lisp代码。

它有什么作用?


慕妹3242003
浏览 724回答 3
3回答

三国纷争

它说“不评价我”。例如,如果您想将列表用作数据而不是代码,则可以在其前面加上引号。例如,(print '(+ 3 4))打印“(+ 3 4)”,而 (print (+ 3 4))打印“7”

慕运维8079593

其他人对这个问题的回答令人钦佩,Matthias Benkard提出了一个很好的警告。不要使用引用来创建您将进行修改的列表。规范允许编译器将引用列表视为常量。通常,编译器将通过在内存中为它们创建单个值来优化常量,然后从出现常量的所有位置引用该单个值。换句话说,它可以将常量视为匿名全局变量。这可能会导致明显的问题。如果修改常量,它可以很好地修改完全不相关代码中相同常量的其他用法。例如,您可以将某个变量与某个函数中的“(1 1)”进行比较,并在完全不同的函数中,使用“(1 1)”启动列表,然后向其中添加更多内容。在运行这些函数时,您可能会发现第一个函数不再正确匹配,因为它现在正在尝试将变量与'(1 1 2 3 5 8 13)进行比较,这是第二个函数返回的。这两个函数完全不相关,但由于使用了常量,它们相互影响。甚至可能发生更疯狂的不良影响,就像完全正常的列表迭代突然无限循环一样。需要常量列表时使用引号,例如用于比较。在修改结果时使用列表。
打开App,查看更多内容
随时随地看视频慕课网APP