gpt4 book ai didi

function - 使用 if 定义函数时出错

转载 作者:行者123 更新时间:2023-12-03 03:53:42 25 4
gpt4 key购买 nike

我们有一个简单的函数定义:

(defn calculate [d x y]
((if (and (== d 1) (== x 1) (== y 0))
1
0)))
(println (calculate 1 1 0))

但这会导致此错误:

Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at jline.ConsoleRunner.main(ConsoleRunner.java:69)
Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn
at user$calculate.invoke(main.clj:13)
at user$eval5.invoke(main.clj:17)
at clojure.lang.Compiler.eval(Compiler.java:6465)
at clojure.lang.Compiler.load(Compiler.java:6902)
at clojure.lang.Compiler.loadFile(Compiler.java:6863)
at clojure.main$load_script.invoke(main.clj:282)
at clojure.main$script_opt.invoke(main.clj:342)
at clojure.main$main.doInvoke(main.clj:426)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:401)
at clojure.lang.AFn.applyToHelper(AFn.java:161)
at clojure.lang.Var.applyTo(Var.java:518)
at clojure.main.main(main.java:37)
... 5 more

(顺便说一句,第 13 行是带有 ifand 的行)。

与向量相同:

(defn calculate [vectorr]
((if (and (== (vectorr 0) 1) (== (vectorr 1) 1) (== (vectorr 2) 0))
1
0)))
(println (calculate [1 1 0]))

这会导致:

Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn

...相同。

还有 map :

(defn calculate [mapp]
((if (and (== (mapp :d) 1) (== (mapp :x) 1) (== (mapp :y) 0))
1
0)))
(println (calculate {:d 1 :x 1 :y 0}))

结果相同:

Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn

我们认为这与 if 或比较有关。我们已经用普通参数、向量作为参数和映射本身进行了尝试,显然,错误保持不变。

我们还尝试了许多其他变体,但没有对实际问题有更深入的了解。

最佳答案

您的函数体周围有一对额外的括号,这意味着您想要调用 if 的结果(可以是 1 或 0 - 即长整型)。

应该是:

(defn calculate [vectorr]
(if (and (== (vectorr 0) 1) (== (vectorr 1) 1) (== (vectorr 2) 0))
1
0))

关于function - 使用 if 定义函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7699569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com