2012-09-26 28 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 के रूप में ]) और कॉल (नामस्थान/+ ...)। नीचे प्रस्तुत समस्या के लिए कोड है।

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

इसके अलावा, (in-ns) देखें।

संबंधित मुद्दे

 संबंधित मुद्दे