为什么(#(+;%1)3)在Clojure中有效,但(#((%)3)不起作用?

为什么(#(+;%1)3)在Clojure中有效,但(#((%)3)不起作用?,clojure,Clojure,标题说明了一切。为什么(#(+%1)3)可以工作,但是(#(%3)不能在Clojure中工作?相反,它给出了一个错误: 1. Unhandled java.lang.ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn #(%)不应该与标识函数相同吗?否。#(%)正在尝试调用%。它与(fn[x](x))相同。在您的特定情况下,您试图将3作为函数调用 标识函数应该是#(do%),因为do计算它后面的表达式并

标题说明了一切。为什么
(#(+%1)3)
可以工作,但是
(#(%3)
不能在Clojure中工作?相反,它给出了一个错误:

1. Unhandled java.lang.ClassCastException
   java.lang.Long cannot be cast to clojure.lang.IFn
#(%)
不应该与
标识
函数相同吗?

否。
#(%)
正在尝试调用%。它与
(fn[x](x))
相同。在您的特定情况下,您试图将3作为函数调用


标识函数应该是
#(do%)
,因为
do
计算它后面的表达式并返回最后一个表达式。

但是为什么
%
在第一个示例中表示参数值,而在第二个示例中调用参数?因为它是
在第二个示例中。
之后的第一件事是调用的函数。
在第一个示例中是
+
。很好的解释。谢谢。