6

ライブラリhttps://github.com/clojure/algo.genericが一般的な算術演算子を実装する方法を提供していることは知ってい+ * / -ますが、それらを作成する方法とライブラリとして使用する方法の簡単な例を見つけることができませんでした。

ベクトル加算などを実装したい場合は、次のように言います。

> (+ [1 2 3 4 5] 5) 
;; => [6 7 8 9 10]

どうすればいいですか:

  • +algo.genericで演算子を定義する
  • +別のプロジェクト内で以前に定義された演算子を使用していますか?
4

2 に答える 2

6
(ns your.custom.operators
  (:import
    clojure.lang.IPersistentVector)
  (:require
    [clojure.algo.generic.arithmetic :as generic]))

(defmethod generic/+
  [IPersistentVector Long]
  [v x]
  (mapv + v (repeat x)))

(ns your.consumer.project
  (:refer-clojure :exclude (+))
  (:use
    [clojure.algo.generic.arithmetic :only (+)])
  (:require
    your.custom.operators))

(defn add-five
  [v]
  (+ v 5))
于 2012-09-26T06:32:39.627 に答える
1

編集2、

user=> (defn + [coll i] (map #(clojure.core/+ % i) coll))
#'user/+
user=> (+ [1 2 3 4 5] 5)
(6 7 8 9 10)

編集、あなたもすることができます

(in-ns 'algo.generic)
(defn + [& args])

- 編集 -

(require [lib:as namespacehere])を使用し、(namespacehere / + ...)を呼び出す必要があります。以下は、提示された問題のコードです。

user=> (map #(+ % 5) [1 2 3 4 5])
(6 7 8 9 10)

また、 (in-ns)をチェックアウトします。

于 2012-09-26T03:37:46.063 に答える