- Clojure - 当我运行这个fibonacci函数时出现错误,任何想法有什么问题?

Jer*_*oko 0 lisp functional-programming clojure

我几个小时前拿起了clojure,我正试图让Fibonacci功能正常工作

这是我正在定义的功能

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

))
Run Code Online (Sandbox Code Playgroud)

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

虽然我对几乎所有语言结构都不熟悉,但就我所知,这似乎是正确的.知道什么是错的吗?

Dan*_*zer 5

你已经犯了太多parens的经典错误,在Lisps中,parens意味着"应用这个函数"所以重要的是只将它们放在函数周围:

(defn fib [x]
  (if (or (= x 1) (= x 2))
      1
      (+ (fib (- x 1))
         (fib (- x 2)))))
Run Code Online (Sandbox Code Playgroud)

你的错误实质上意味着"嘿,你刚试过申请号码!" 所以我们需要删除冗余的parens.