在Clojure的上下文中无法解析symbol: new-map



我正在搜索,但没有找到我问题的答案。

我正在阅读Clojure For The Brave and True,发现了map over map值的实现。

(reduce (fn [new-map [key val]]
(assoc new-map key (inc val)))
{}
{:max 30 :min 10})

工作正常,除了在REPL和file中抛出错误:

. lang。异常:无法解析此上下文中的symbol: new-map

在函数内部执行时:

(defn map-map [fn hash]
(reduce (fn [new-map [key val]]
(assoc new-map key (inc val)))
{}
hash))

我自己的实现(在阅读了第3章之后)工作得很好:

(defn map-map [fn hash]
(into {} (map #(conj [(first %)] (fn (second %))) hash)))

问题是我用一个参数遮蔽了fn。new-map不再是匿名函数的参数,Clojure试图将其作为传递给函数fn的vector中的值来求值。

(defn map-map [func hash]
(reduce (fn [new-map [key val]]
(assoc new-map key (func val)))
{}
hash))

愚蠢的错误,我添加这个答案只是以防有人会有同样的错误,我已经花时间创建了一个问题。

这是第一步,因为你可以看到在原始代码中有inc,我还没有用fn替换,因为即使在REPL中编译器错误。

此外,问题是,我的map-map的第一个实现没有使用fn宏,所以我可以使用它作为一个函数。

相关内容

  • 没有找到相关文章

最新更新