首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clojure不能在不同的命名空间中定义相同的函数?不可能

clojure不能在不同的命名空间中定义相同的函数?不可能
EN

Stack Overflow用户
提问于 2016-10-23 07:30:39
回答 1查看 71关注 0票数 0

我有一个文件"map_reduce2.clj“和另一个"map_reduce3.clj",这两个函数都是”映射-减少“它们自己。

现在我想在"map_reduce2.clj“中使用"map_reduce3.clj”的命名空间,但是当我在emacs中按下“C”来编译"map_reduce3.clj“时,

错误发生:“解析行已经指的是:#‘第12章,映射-还原2/命名空间中的解析行:第12章,映射-还原3”,但这没有任何意义。

代码语言:javascript
复制
; 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))))

错误的图像

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-23 10:48:13

这可能意味着您有肮脏的REPL状态。也许您将函数parse-line从一个名称空间移到另一个命名空间。我建议重新启动REPL,或者将parse-linemap-reduce3如何从另一个命名空间卸载函数?卸载。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40200607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档