我是一个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应用于1和2; 这是不可能的,因为0它不是一个功能.
(map #(list %1) '(0 1 2))
Run Code Online (Sandbox Code Playgroud)
但是按预期工作.
因为(0 1 2)意味着使用args 1和2调用函数0,但0不是函数.所以你需要使用引用或列表函数即'(0 1 2)
OR 来制作列表而不是函数应用程序(list 0 1 2)