2016-10-23 7 views
0

私は1つのファイル "map_reduce2.clj"と別の "map_reduce3.clj"を持っています。両方の定義関数 "map-reduce"自体です。clojureは異なる名前空間で同じ関数を定義できませんか?不可能

今私は「map_reduce3.clj」で「map_reduce2.clj」の名前空間を使用したいが、私は「map_reduce3.clj」をコンパイルするemacsの中で「CC Ckを」を押したときに、

エラーが発生しました: " parse-lineは既に参照しています:# 'chapter12.map-reduce2/parse-line in namespace:chapter12.map-reduce3 "しかし、これは意味をなさない。

; map_reduce3.cli 
(ns chapter12.map-reduce3 
    (:use clojure.java.io) 
    (:require [chapter12.map-reduce2 :as c12])) 

(def IGNORE "_") 

(defn parse-line [line] 
    (let [tokens (.split (.toLowerCase line) " ")] 
    [[IGNORE (count tokens)]])) 

(defn average [numbers] 
    (/ (apply + numbers) 
    (count numbers))) 

(defn reducer [combined] 
    (average (val (first combined)))) 

(defn average-line-length [filename] 
    (c12/map-reduce parse-line reducer (line-seq (reader filename)))) 


; map_reduce2.clj 
(ns chapter12.map-reduce2 
    (:use clojure.java.io)) 

(defn combine [mapped] 
    (->> (apply concat mapped) 
     (group-by first) 
     (map (fn [[k v]] 
       {k (map second v)})) 
     (apply merge-with conj))) 

(defn map-reduce [mapper reducer args-seq] 
    (->> (map mapper args-seq) 
     (combine) 
     (reducer))) 

(defn parse-line [line] 
    (let [tokens (.split (.toLowerCase line) " ")] 
    (map #(vector % 1) tokens))) 

(defn sum [[k v]] 
    {k (apply + v)}) 

(defn reduce-parsed-lines [collected-values] 
    (apply merge (map sum collected-values))) 


(defn word-frequency [filename] 
    (map-reduce parse-line reduce-parsed-lines (line-seq (reader filename)))) 

images of the the error

答えて

2

これはおそらく、あなたが汚いREPL状態があることを意味します。関数parse-lineをある名前空間から別の名前空間に移動した可能性があります。 REPLを再起動するか、parse-linemap-reduce3How to unload a function from another namespace?からアンロードすることをお勧めします。

+0

ありがとうございます、ありがとうございます – imnisen

関連する問題