如何在clojure中实现运算符添加“+”?

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

在Java中,将NDArray y添加到x中是向前推进的。

NDManager manager = NDManager.newBaseManager();
NDArray x = manager.create(3f);
NDArray y = manager.create(2f);
x.add(y);

在 Clojure 中

(def ndm (nd/base-manager))
(def x (nd/create ndm 3.))
(def y (nd/create ndm 2.))

(nd/+ x y) ;; Error 
           ;; This NDArray implementation does not currently support this operation

在 clojure 中实现相同的函数时,编译器永远不知道 array0 和 array1 是 NDArray 的变量,也永远不知道使用函数 NDArray.add 将 NDArray y 添加到 x 中。请告知如何在 clojure 中实现运算符添加“+”。

(ns djl.ndarray
  (:import [ai.djl.ndarray NDArray])
  (:refer-clojure :exclude [+ - / *
                            = <= < >= >
                            identity to-array
                            min max concat
                            get set
                            flatten
                            sort]))
(defn + [array0 array1]
  (.add array0 array1))
java functional-programming clojure operator-overloading
1个回答
0
投票

对我有用。查看 scicloj/clj-djl 源 了解实现细节。

(ns stack-overflow-3.djl
    (:require
        [clj-djl.ndarray :as nd]))

(let [manager (nd/new-base-manager)
      v1      (nd/create manager [5])
      v2      (nd/create manager [13])]
    (nd/+ v1 v2))
© www.soinside.com 2019 - 2024. All rights reserved.