2012-09-26 19 views
5

Ich weiß, dass die Bibliothek https://github.com/clojure/algo.generic Möglichkeiten zur Implementierung von generischen arithmetischen Operatoren + */- bietet, aber dort konnte ich kein einfaches Beispiel finden, wie man sie erstellt und dann wie man es als Bibliothek verwendet.Wie kann die clojure.algo.generic-Bibliothek verwendet werden?

sagen, wenn ich wollte Vektor zusätzlich implementieren, etc:

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

, wie würde ich mich über:

  • Definition der + Operator mit algo.generic
  • zuvor die + Operator in einem anderen Projekt definiert?

Antwort

4
(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

bearbeiten 2,

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

bearbeiten, können Sie auch

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

- Bearbeiten -

Sie sollten verwenden (erfordert [lib: als namespacehere ]) und call (namespacehere/+ ...). Unten ist der Code für das Problem dargestellt.

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

Überprüfen Sie auch (in-ns).

Verwandte Themen