gpt4 book ai didi

Clojure : Integer cannot cast to IFn

转载 作者:行者123 更新时间:2023-12-03 00:27:32 24 4
gpt4 key购买 nike

我在这里遇到了可怕的 * 无法使用简单的数学函数将其转换为 IFn 错误:

(defn calc [sc1 m1 alpha beta gamma ta1 tb1 min_m1 min_tca tca_ratio x32]
(*
(max(0,
(+
(* alpha log(sc1))
(* beta log(m1))
(* gamma (/ ta1 tb1))
(- log(ta1) log(tb1)))))

(max(x32,(/ m1 min_m1)))

(max(x32,(/ tca_ratio min_tca)))))

;;;;;;;;;;;;

参数只是一堆数字:

(calc 1 2 3 4 5 1 2 3 4 5 1)

我的想法/我的问题

通常,当我收到此错误时,我发现这是由于

1) 一个额外的括号(即当我不小心在代码中添加了一个额外的闭包时)或

2) 参数顺序错误(显然 - 强制转换异常)。

我的问题很简单......如何修复此代码片段,以及可选的 - 如何一劳永逸地击败这个常见异常?在我的 Clojure 编码探索中,这种情况似乎经常发生,我想也许我还没有找到正确的开发风格。

-------------------------------------------------------- -----------

更新:

我的代码充满了不规则的语法。错误出在内部函数中,使用 java/c 风格的函数调用:例如 max/log ...

最佳答案

在我看来,有问题的表达式是 (x32,(/m1 min_m1)) 和 (x32,(/tca_ratio min_tca)) 以及 log(..) 表达式。

Clojure 遵循标准 lisp 约定,将不带引号的列表的第一个元素作为要调用的函数。换句话说,您希望用 (log ...) 代替 log(...),用 (max ...) 代替 (max (...))

在您的特定风格中捕获这些错误非常容易:与“XXX(”(其中 XXX 是任意数量的非空格、非括号字符)匹配的所有内容都是错误。

关于Clojure : Integer cannot cast to IFn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9727954/

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