我尝试使用递归在Clojure中创建阶乘函数。
现在,当我尝试调用函数
这是否意味着在使用
另外,我应该如何高效地掌握这种函数式语法,因为我习惯了命令式/OOP的思维方式?在反向输入所有内容时感觉非常尴尬。在过程范式中,思维的连续性直接映射到新代码行,从而改变值。在函数式语法中,为了操作当前值的每个步骤,我必须将新函数包装在表达式周围,并且很难跟踪括号和作用域。我应该学会以相反的顺序思考过程模型以流畅地编写函数式风格的代码吗?
我理解没有可变状态和纯函数的好处(更少的错误),但很难相信它值得放弃编写过程式代码的方便性。目前,所有这些似乎都是被夸大的、杂乱无章的东西,但也许开始变得有意义了。
(defn fac[x] (if (= x 1) 1 (* x (fac (- x 1)))))
现在,当我尝试调用函数
(fac 5)
时,出现了异常。java.lang.IllegalStateException: Attempting to call unbound fn: #'sandbox11355/fac
这是否意味着在使用
defn
关键字定义函数时无法使用递归?另外,我应该如何高效地掌握这种函数式语法,因为我习惯了命令式/OOP的思维方式?在反向输入所有内容时感觉非常尴尬。在过程范式中,思维的连续性直接映射到新代码行,从而改变值。在函数式语法中,为了操作当前值的每个步骤,我必须将新函数包装在表达式周围,并且很难跟踪括号和作用域。我应该学会以相反的顺序思考过程模型以流畅地编写函数式风格的代码吗?
我理解没有可变状态和纯函数的好处(更少的错误),但很难相信它值得放弃编写过程式代码的方便性。目前,所有这些似乎都是被夸大的、杂乱无章的东西,但也许开始变得有意义了。
defn
没有问题。你正在编译的文件是否与此次编辑保持最新? - undefined