我有問題EVAL-ING通過Deriva返回LazySeq:Clojure的EVAL用數學函數
(use 'clojure.core.matrix)
(use 'com.lambder.deriva.core)
(def f1 '(cos (* x y)))
(def f2 '(sin (* x y)))
(def f [f1 f2])
(def u ['x 'y])
(def x 4)
(def y 3)
(defn jacobian [f u]
(map #(partial-derivative f %) u)
)
返回LazySeq
((vector (* (* -1 (sin (* x y))) y) (* (cos (* x y)) y)) (vector (* (* -1 (sin (* x y))) x) (* (cos (* x y)) x)))
哪些可以使用REPL成功EVAL-ED:
(eval (into [] (jacobian f u)))
結果在正確的矩陣
[[1.609718754001305 2.5315618761974763] [2.1462916720017398 3.3754158349299686]]
如果我把EVAL的CLJ文件內lein run
(defn -main
[]
(eval (into [] (jacobian f u)))
)
我得到了不同的命名空間Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: sin in this context, compiling:(/tmp/form-init2786363415298022761.clj:1:113)
因爲eval
作品。
有什麼辦法可以將clojure.math函數包含在由eval生成的臨時名稱空間中嗎?還是有更好的方法來評估表達?