我有一个功能,需要多少年和工资,然后递归加倍工资,直到几年用尽.但是,我不断收到此错误:
ClassCastException java.lang.Long无法强制转换为clojure.lang.IFn
代码
(defn calculate-salary
[years salary]
(if (= years 0)
(salary)
(calculate-salary (- years 1) (* salary 2))))
Run Code Online (Sandbox Code Playgroud)
我对Clojure很新,所以我确信它很简单,但我似乎无法弄明白.
noi*_*ith 42
错误的含义不应该太难理解:在预期函数的地方使用数字.
Clojure中的括号不是分组构造,它们主要用于调用函数调用.如果更改(salary)为salary,则返回数字而不是尝试将其称为无参数函数.
因为你是新手,所以我重写了你的功能,使其更加惯用.此外,它使用recur,因此它不会消耗调用堆栈.
(defn calculate-salary
[years salary]
(if (zero? years)
salary
(recur (dec years) (* salary 2))))
Run Code Online (Sandbox Code Playgroud)
注意使用零?谓词,复发和十进制
编辑:拼写错误和语法
这个
(salary)
Run Code Online (Sandbox Code Playgroud)
是函数调用,但salary不是函数 - 它是一个数字.
解决方案是不将它包装在括号中:
(if (= years 0) salary (calculate-salary (- years 1) (* salary 2)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20333 次 |
| 最近记录: |