Functional programming -Clojure-当我运行这个fibonacci函数时,我得到了一个错误,知道什么';怎么了?

Functional programming -Clojure-当我运行这个fibonacci函数时,我得到了一个错误,知道什么';怎么了?,functional-programming,lisp,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不能强制转换为clojure.lang.IFn user/fib(无源文件:3) 虽然我对几乎所有的语言结构都不熟悉,但据我所知,这似乎是正确的。你知道怎么回事吗?你犯了太

几个小时前我拿起了clojure,我正试图让斐波那契函数起作用

这是我定义的函数

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

))
我得到了这个错误:
java.lang.Long不能强制转换为clojure.lang.IFn user/fib(无源文件:3)


虽然我对几乎所有的语言结构都不熟悉,但据我所知,这似乎是正确的。你知道怎么回事吗?

你犯了太多paren的经典错误,在Lisps中,paren的意思是“应用此函数”,因此重要的是只将它们放在函数周围:

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

您的错误本质上意味着“嘿,您刚刚尝试应用了一个数字!”因此我们需要删除多余的参数。

您犯了太多参数的经典错误,在Lisps中,参数的意思是“应用此函数”,因此重要的是只将它们放在函数周围:

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

您的错误本质上意味着“嘿,您刚刚尝试应用了一个数字!”因此我们需要删除多余的参数。

谢谢!我认为if形式就像(if(condition)(iftrue)(iffalse))@Jeroko不,lisp中几乎没有任何形式涉及在parans中包装子表达式:)PS如果我回答了你的问题,请选中复选标记将其标记为ClosedHanks!我认为if形式类似于(if(condition)(iftrue)(iffalse))@Jeroko不,lisp中几乎没有任何形式涉及在parans中包装子表达式:)PS如果我回答了你的问题,请选中复选标记将其标记为关闭