我对 Clojure 非常陌生,我有一个简单的问题需要解决,但谷歌搜索并没有帮助解决这个问题。正如学习如何在 Clojure 中创建函数的练习一样,我尝试创建一个函数,该函数采用向量的值并按以下方式计算它们的算术平均值:
(defn mean [vec]
( let [x (reduce + vec), y (count vec)]
(x / y)
))
当我通过输入
(sum vec_foo)
创建名称为 vec_foo 的向量后在解释器中运行此命令时,我收到以下消息:
用户/总和 (REPL:1) 处的执行错误 (ClassCastException)。 java.lang.Long 类不能转换为 clojure.lang.IFn 类(java.lang.Long 位于加载器“bootstrap”的 java.base 模块中;clojure.lang.IFn 位于加载器“app”的未命名模块中)
尝试
(apply sum vec_foo)
时,会出现以下消息:
user/eval369 (REPL:1) 处出现执行错误 (ArityException)。 错误数量的参数 (5) 传递给:user/sum
我最初的目标是仅获取向量值的平均值作为输出,但这些错误消息也非常有趣。任何有关错误消息含义或解决问题的信息将不胜感激。
在您的代码中,
x
始终是 Long
当您运行
(x / y)
时,它会尝试将 x
作为函数调用,但您无法将 Long 转换为函数。
你想做的是
(/ x y)
关于
sum
,由于您没有分享实现,我只能猜测:可能(sum vec_foo)
可以工作。