我有一个文件"map_reduce2.clj“和另一个"map_reduce3.clj",这两个函数都是”映射-减少“它们自己。
现在我想在"map_reduce2.clj“中使用"map_reduce3.clj”的命名空间,但是当我在emacs中按下“C”来编译"map_reduce3.clj“时,
错误发生:“解析行已经指的是:#‘第12章,映射-还原2/命名空间中的解析行:第12章,映射-还原3”,但这没有任何意义。
; 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))))发布于 2016-10-23 10:48:13
这可能意味着您有肮脏的REPL状态。也许您将函数parse-line从一个名称空间移到另一个命名空间。我建议重新启动REPL,或者将parse-line从map-reduce3:如何从另一个命名空间卸载函数?卸载。
https://stackoverflow.com/questions/40200607
复制相似问题