什么时候在Lisp中使用'(或引用)?在通过介绍性的Lisp书的主要部分之后,我仍然无法理解特殊运算符(quote)(或等效的')函数的作用,但这已经是我见过的所有Lisp代码。它有什么作用?
3 回答
三国纷争
TA贡献1804条经验 获得超7个赞
它说“不评价我”。例如,如果您想将列表用作数据而不是代码,则可以在其前面加上引号。例如,
(print '(+ 3 4))
打印“(+ 3 4)”,而 (print (+ 3 4))
打印“7”
慕运维8079593
TA贡献1876条经验 获得超5个赞
其他人对这个问题的回答令人钦佩,Matthias Benkard提出了一个很好的警告。
不要使用引用来创建您将进行修改的列表。规范允许编译器将引用列表视为常量。通常,编译器将通过在内存中为它们创建单个值来优化常量,然后从出现常量的所有位置引用该单个值。换句话说,它可以将常量视为匿名全局变量。
这可能会导致明显的问题。如果修改常量,它可以很好地修改完全不相关代码中相同常量的其他用法。例如,您可以将某个变量与某个函数中的“(1 1)”进行比较,并在完全不同的函数中,使用“(1 1)”启动列表,然后向其中添加更多内容。在运行这些函数时,您可能会发现第一个函数不再正确匹配,因为它现在正在尝试将变量与'(1 1 2 3 5 8 13)进行比较,这是第二个函数返回的。这两个函数完全不相关,但由于使用了常量,它们相互影响。甚至可能发生更疯狂的不良影响,就像完全正常的列表迭代突然无限循环一样。
需要常量列表时使用引号,例如用于比较。在修改结果时使用列表。
添加回答
举报
0/150
提交
取消