Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在clojure中将单个数字打印到控制台?_Clojure - Fatal编程技术网

如何在clojure中将单个数字打印到控制台?

如何在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

我试图在控制台上打印一个数字:mathfunction应该返回

两个较大数字的平方和

为了确保问题不是我的数学函数:

(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。对。原来的问题被编辑了好几次。但你是对的。