如何使用clojure.algo.generic库?

zca*_*ate 6 clojure

我知道库https://github.com/clojure/algo.generic提供了实现泛型算术运算符的方法,+ * / -但在那里我找不到如何创建它们的简单示例,以及如何将其用作库.

说如果我想实现向量加法等:

> (+ [1 2 3 4 5] 5) 
;; => [6 7 8 9 10]
Run Code Online (Sandbox Code Playgroud)

我该怎么做:

  • +用algo.generic 定义运算符
  • 使用+之前在另一个项目中定义的运算符?

kot*_*rak 5

(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))
Run Code Online (Sandbox Code Playgroud)