私は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))))
ありがとうございます、ありがとうございます – imnisen