ClojureDocsでは、アセットはrefrencejavaタイプの配列でのみ機能することが記載されています。ただし、amapの使用法については触れられていません。
(reduce
(fn [#^doubles sum #^doubles prob]
(println sum)
(amap ^doubles sum idx ret
(fn [x] (println x) (+ x (get prob idx)))))
(double-array 3 (double 0))
[(double-array [1.0 2.0 3.0])
(double-array [1.0 2.0 3.0])
(double-array [1.0 2.0 3.0])
(double-array [1.0 2.0 3.0])
(double-array [1.0 2.0 3.0])])
上記のコードは以下のエラーメッセージで失敗します
IllegalArgumentException一致するメソッドが見つかりません:aset clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:80)
このシナリオではamapを使用できなかったようです。
2つの質問があります:
- 単純なマップロジックのプリミティブ配列を返すための適切なソリューションはありますか?
- プリミティブ配列でアセットがサポートされていないのはなぜですか?