Clojure规范化函数运行时错误

时间:2015-06-03 20:55:45

标签: clojure clojure-contrib

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

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)))

任何提示都将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:3)

+在错误的位置:

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

应该是:

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

和y1也一样。由于你在其他地方有正确的看法,它看起来像一个简单的拼写错误。

虽然在clojure代码中看到)))))))是很正常的,但((的出现次要了。