functional-programming - - Clojure - 当我运行这个斐波那契函数时出现错误,知道哪里出了问题吗?

标签 functional-programming lisp clojure

我几个小时前开始使用 clojure 并试图让斐波那契函数正常工作

这是我正在定义的函数

(defn fib [x]
  (if (or (= x 1) (= x 2))
    ((inc 0))
      ((+ (fib (- x 1)) (fib (- x 2))))

))

我收到此错误:java.lang.Long cannot be cast to clojure.lang.IFn user/fib (NO_SOURCE_FILE:3)

虽然我不熟悉几乎所有的语言结构,但据我所知这似乎是正确的。知道出了什么问题吗?

最佳答案

你犯了太多括号的经典错误,在 Lisps 中,括号的意思是“应用这个函数”所以只把它们放在函数周围很重要:

(defn fib [x]
  (if (or (= x 1) (= x 2))
      1
      (+ (fib (- x 1))
         (fib (- x 2)))))

您的错误本质上意味着“嘿,您刚刚尝试申请一个号码!”所以我们需要删除多余的括号。

关于functional-programming - - Clojure - 当我运行这个斐波那契函数时出现错误,知道哪里出了问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20633810/

相关文章:

clojure - 在 Clojure(Script) 中编写跨平台宏的正确方法是什么?

functional-programming - Coq: "lens is closed under composition"的证明

macros - 让出 Lambda : symbolic representation in macros

list - 从 Scheme 中的列表中删除元素

macros - 加载 lisp 宏 : Error: Class named ENTITY not found. 时出错在进程 Listener(4) 中执行 : FIND-CLASS, 时

clojure - 如何使用 ClojureScript 和 Figwheel 与后端通信?

java - 从类路径初始化 SUTime 的 JollyDayHoliday,ReflectionLoadingException : Error creating TimeExpressionExtractorImpl

scala - 如何推理 Scala Cats/fs2 中的堆栈安全?

javascript - React - 将函数传递给两扇门,并带有参数

javascript - 'map' ping multiple lists有名称吗?