如何正确使用 clojurescript 来使用 math.js?

问题描述 投票:0回答:1

将 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)
clojurescript math.js clojurescript-javascript-interop
1个回答
0
投票

您必须使用 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
)。

© www.soinside.com 2019 - 2024. All rights reserved.