如何在clojure中将单个数字打印到控制台?
我试图在控制台上打印一个数字:mathfunction应该返回 两个较大数字的平方和 为了确保问题不是我的数学函数:如何在clojure中将单个数字打印到控制台?,clojure,Clojure,我试图在控制台上打印一个数字:mathfunction应该返回 两个较大数字的平方和 为了确保问题不是我的数学函数: (defn -main [& args] (println 5.4)) java.lang.ClassCastException:无法将java.lang.Long强制转换为 clojure.lang.IFn 那么我做错了什么?您在以下方面遇到了问题: (mathfunction(1, 5, 3)) 您需要的是: (mathfunction '(1, 5, 3
(defn -main [& args]
(println 5.4))
java.lang.ClassCastException:无法将java.lang.Long强制转换为
clojure.lang.IFn
那么我做错了什么?您在以下方面遇到了问题:
(mathfunction(1, 5, 3))
您需要的是:
(mathfunction '(1, 5, 3))
(max (first lst) (first (rest lst)))
或:
因为在(mathfunction(1,5,3))中,1是一个数字而不是一个函数,这就是为什么会得到:
java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn
同样,这是错误的,原因与上述相同:
(max ((first lst) (first (rest lst))))
您需要的是:
(mathfunction '(1, 5, 3))
(max (first lst) (first (rest lst)))
请记住,在Lisp中,列表中的第一个元素是一个特殊的东西。它被称为:函数位置对于您想要做的事情,这种方式对于clojure来说可能更为惯用:
(defn mathfunction [& args]
(let [a (apply max args)
rem (remove #(= % a) args)
b (apply max rem)]
(+ (Math/sqrt a) (Math/sqrt b))))
您还需要像(mathfunction 1 2 3)那样调用它,而不是像(mathfunction(1 2 3))那样调用它
latte ris被解释为一个函数调用,1作为函数,2,3作为参数。有一点:您可以使用一个let来执行所有3个let操作。我试着执行你的mathfunction,但它不起作用,所以可能错误就在那里。对我来说,这似乎不是合理的clojure代码#(max(a,b,c))没有多大意义,很可能应该是(max a,b,c)。你想试试什么?也许我们能帮上忙。这只是我学习clojure的一个练习。我的问题是,我不明白为什么print不能打印数字或如何转换数字。我清理了我的代码,并描述了数学函数的功能,因为
mathfunction
包含3个参数,而不是一个列表,需要的是(mathfunction 1 5 3)
@TerjeD。对。原来的问题被编辑了好几次。但你是对的。