在Lisp中,为何需要使用list函数来返回列表?
为什么Lisp中必须用
list函数才能返回包含参数的列表? 你最初写的代码是这样的:
(defun list-of-things (thing1 thing2 thing3) "returns a ???" '(thing1 thing2 thing3))
这段代码里的'(thing1 thing2 thing3)是引用(quote)操作,它会直接返回符号thing1、thing2、thing3组成的固定列表——不管你调用时传入什么参数,它只会返回(THING1 THING2 THING3)。因为引用的作用就是阻止Lisp对括号里的内容求值,里面的符号本身就是最终的值,不会去对应函数的参数。
而正确的写法使用了list函数:
(defun list-of-things (thing1 thing2 thing3) "returns a list" (list thing1 thing2 thing3))
list是Lisp的内置函数,它会先对每个传入的参数求值,再把求值后的结果组装成新列表。比如调用(list-of-things 1 2 3)时,thing1会被求值为1,thing2为2,thing3为3,最终返回(1 2 3);如果传入字符串"a" "b" "c",就会返回("a" "b" "c"),这才是你想要的动态返回包含参数值的列表的效果。
核心区别:
- 引用(
') 用于创建固定的字面量列表,元素不会被求值,就是符号本身。 list函数用于动态生成列表,会先计算每个参数的实际值,再组合成列表。
内容的提问来源于stack exchange,提问作者bbarker
相关产品推荐
相关产品推荐

