私はClojureの喜びamap
(Clojure 1.2用に書かれたものだと理解しています)に取り組んでおり、関連する機能について何かを理解しようとしています。
次のコードは、型ヒントがないと 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)))))
交換:
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)))))
交換:
user=> (asum-sq (float-array [1 2 3 4]))
30.0
この問題に関する情報を見つけるのに苦労しています。この重大な変更が導入されたのは正確にはいつですか? それとも私はこれを間違って理解していますか?