3

私は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

この問題に関する情報を見つけるのに苦労しています。この重大な変更が導入されたのは正確にはいつですか? それとも私はこれを間違って理解していますか?

4

1 に答える 1