将 math.js 与 clojurescript 一起使用失败。请评论如何正确使用clojurescript访问math.js的功能。
错误行
1. product (math/dot v1 v2)]
2. Ainv (math/inv A)]
完整列表
(ns numerical-methods.test
(:require ["mathjs" :as math]))
;; Function to create and print a vector
(defn a-vector []
(let [v [1.0 2.0 3.0]]
(println "Vector:" v)))
;; Function to compute and print the inner product of two vectors
(defn inner-product-demo []
(println "Dot product of two vectors")
(let [v1 [1.0 2.0]
v2 [3.0 4.0]
product (math/dot v1 v2)] ;; Error : shadow.js.shim.module$mathjs.dot is not a function.
(println "Inner Product:" product)))
;; Function to invert a matrix and print it
(defn invert-matrix []
(println "Invert a matrix")
(let [A [[1 2 3]
[6 5 4]
[8 7 9]]
Ainv (math/inv A)] ;; Error : shadow.js.shim.module$mathjs.inv is not a function.
(println "Inverse Matrix:")
(println Ainv)))
;; Main function to run demos
(defn -main []
(println "Chapter 1 demos")
(a-vector)
(inner-product-demo)
(invert-matrix))
;; Call the main function
(-main)
在 REPL 中执行时出现错误消息。
; Execution error (TypeError) at (<cljs repl>:1).
; shadow.js.shim.module$mathjs.dot is not a function. (In 'shadow.js.shim.module$mathjs.dot(v1,v2)', 'shadow.js.shim.module$mathjs.dot' is undefined)
; Execution error (TypeError) at (<cljs repl>:1).
; shadow.js.shim.module$mathjs.inv is not a function. (In 'shadow.js.shim.module$mathjs.inv(A)', 'shadow.js.shim.module$mathjs.inv' is undefined)
您必须使用 NPM 或其他工具手动安装
mathjs
。
或者,您可以在项目根目录的 mathjs
文件中指定 deps.cljs
:https://shadow-cljs.github.io/docs/UsersGuide.html#publish-deps-cljs
您的代码中还有另一件事是错误的 -
mathjs
中的函数需要 JS 对象,但不知道如何使用 CLJS 对象。因此,您必须创建 JS 对象(在 #js
前面使用 [...]
,如 #js [1.0 2.0]
中所示;注意它很浅 - 对于矩阵,您必须在每一行前面和矩阵本身前面使用它)或将 CLJS 对象转换为 JS 对象(对于数组,您可以使用 into-array
,对于任意数据 - clj->js
)。