我知道库https://github.com/clojure/algo.generic提供了实现泛型算术运算符+ * / -
的方法,但在那里我找不到一个如何创建它们然后如何将它用作库的简单示例。
如果我想实现向量添加等,请说:
> (+ [1 2 3 4 5] 5)
;; => [6 7 8 9 10]
我该怎么做:
+
运算符
+
运算符?答案 0 :(得分: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))
答案 1 :(得分: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)。