Clojure:列表和返回列表的函数之间的差异

Edu*_*eda 4 clojure

我是一个Clojure新手.我试图理解为什么第二种形式不起作用:

第一种形式:

user=>(def nums(range 3))
(0 1 2)
user=>(map #(list %1) nums)
((0) (1) (2))
Run Code Online (Sandbox Code Playgroud)

第二种形式:

user=> (map #(list %1) (0 1 2))
java.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IFn 
(NO_SOURCE_FILE:0)
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 11

问题是表达式(0 1 2),它被解释为0应用于12; 这是不可能的,因为0它不是一个功能.

(map #(list %1) '(0 1 2))
Run Code Online (Sandbox Code Playgroud)

但是按预期工作.


Ank*_*kur 5

因为(0 1 2)意味着使用args 1和2调用函数0,但0不是函数.所以你需要使用引用或列表函数即'(0 1 2) OR 来制作列表而不是函数应用程序(list 0 1 2)