You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure中使用make-array生成零值二维矩阵的输出问题

解决Clojure中make-array返回Java数组转Clojure序列的问题

你看到的#object["[[I" ...]是Java原生二维int数组的字符串表示,因为make-array创建的是Java原生数组,而非Clojure自带的持久化集合类型。要得到你预期的[[0 0 0] ...]形式,只需把Java数组转换成Clojure的向量结构即可。

方法一:直接创建并转换为Clojure向量

写函数时直接在创建数组后完成转换:

(defn zero-matrix [rows cols]
  (vec (map vec (make-array Integer/TYPE rows cols))))

调用示例:

(zero-matrix 3 3) ; 返回 [[0 0 0] [0 0 0] [0 0 0]]

方法二:转换已存在的Java数组

如果已经用make-array创建了数组,直接对其做转换:

(def m (make-array Integer/TYPE 3 3))
(vec (map vec m)) ; 将Java数组转为Clojure向量矩阵

补充说明

  • vec函数会把Java数组转换成Clojure的不可变向量,外层vec处理二维数组的外层结构,内层map vec处理每个一维子数组。
  • 如果你需要可变的矩阵结构,Java数组本身可以保留(依然能用get-in/assoc-in操作),但如果要返回符合Clojure集合风格的矩阵,上述转换方式是最直接的方案。

内容的提问来源于stack exchange,提问作者kdv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 11:57:35