Clojure 规范化函数运行时错误

Clojure normalize function runtime error

我写的这段代码给出了错误:

java.lang.Long cannot be cast to clojure.lang.IFn

这意味着我在需要函数的地方使用了一个数字。

我认为这与 clojure.math.numeric-tower 的 expt 函数有关,但我不确定。神秘的错误信息 FTL.

(ns point-normalize.core
  (:require [clojure.math.numeric-tower :as math :only (sqrt expt)]))

(defn normalize [x y]
  (let [x1 (/ x (math/sqrt ((math/expt x 2)+ (math/expt y 2))))
        y1 (/ y (math/sqrt ((math/expt x 2)+ (math/expt y 2))))]
    (x1 y1)))

如有任何提示,我们将不胜感激。谢谢。

+ 在错误的位置:

((math/expt x 2)+ (math/expt y 2)))

应该是:

(+ (math/expt x 2) (math/expt y 2)))

y1 也一样。因为你在其他地方有这个正确的它看起来像是一个简单的错字。

虽然在 clojure 代码中看到 ))))))) 很正常,但需要再看一眼 (( 的出现。