3
我正在通过The Joy of Clojure(我的理解是为Clojure 1.2编写的)工作,并试图了解一些关于amap
和相关函数的内容。Clojure 1.4似乎不支持没有类型提示的地图
下面的代码不会用Clojure 1.4没有类型提示工作:
(defn asum-sq [xs]
(let [dbl (amap xs i ret
(* (aget xs i)
(aget xs i)))]
(areduce dbl i ret 0.0
(+ ret (aget dbl i)))))
REPL:添加
user=> (asum-sq (float-array [1 2 3 4]))
IllegalArgumentException No matching method found: aset clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)
版本与类型提示的作品:
(defn ^Double asum-sq [^floats xs]
(let [^floats dbl (amap xs i ret
(* (aget xs i)
(aget xs i)))]
(areduce dbl i ret 0.0
(+ ret (aget dbl i)))))
REPL:
user=> (asum-sq (float-array [1 2 3 4]))
30.0
我很难在这个问题上找到信息。究竟是什么时候引入了这个突破性变革或者我错误地理解了这一点?
数字处理在1.3中发生了很大的变化。信息在这里:http://dev.clojure.org/display/doc/Documentation+for+1.3+Numerics – Bill
删除了我以前的评论。链接的文档没有具体说明在1.3(?) – noahlz
中明显地(?)对'amap'做出的非向后兼容变化。对,我只是想指出你的总体方向。在我遇到的大多数情况下,Clojure代码的喜好保持得很好,但有一些已经过时了。 – Bill