2012-09-26 17 views
5

ライブラリhttps://github.com/clojure/algo.genericは一般的な算術演算子+ */-を実装する方法を提供していますが、そこでは単純な例を見つけることができず、ライブラリとして使用する方法がわかりませんでした。clojure.algo.genericライブラリはどのように使用できますか?

は、私はベクトル加算を実装したい場合は言う、など:

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

私は行くだろうか:

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

答えて

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

編集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]) 

を行うことができます - 編集 -

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

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

また、(in-ns)をチェックしてください。

関連する問題