gpt4 book ai didi

clojure - Clojure中的'()和(list)有什么区别?

转载 作者:行者123 更新时间:2023-12-03 12:03:58 25 4
gpt4 key购买 nike

列表上的API Cheatsheet部分似乎表明'()是一个列表构造函数,就像(list)一样,但是我发现实际上它们并不完全相同。例如,给定:

(def foo "a")
(def bar "b")
(def zip "c")

以下语句:
(apply str '(foo bar zip))

产生输出“foobarzip”,这是我所不希望的。

但是据称是等效的:
(apply str (list foo bar zip))

如我所料,会产生“abc”。

这里发生了什么?如果Clojure中的列表有“简写形式”(例如 map 的 {}和 vector 的 []),那是什么?

最佳答案

在lisps中,'(类似于quote)引用了它的参数,即按照它们的s-exp格式几乎完全保留了它们,包括不评估其中的任何内容。

换句话说,'(foo bar zip)创建一个包含符号foobarzip的列表;而(list foo bar zip)创建一个包含foobarzip值的列表。在第一种情况下,str将符号本身转换为字符串,然后将它们串联。

作为一个说明:

=> (def foo "a")
=> (type (first '(foo)))
clojure.lang.Symbol
=> (type (first (list foo)))
java.lang.String

关于clojure - Clojure中的'()和(list)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10296857/

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