【发布时间】:2018-03-06 01:09:15
【问题描述】:
我正在尝试在 clojure 中实现 range 函数,但我的实现返回了一个我无法理解的错误。这里是:
(defn implement-range [a b] (
if (= a b)
(conj nil b)
((conj nil a) (implement-range (inc a) b))))
我正在尝试以递归方式进行操作,但它还没有完成,因为我遇到了这个错误:
ClassCastException clojure.lang.PersistentList cannot be cast to clojure.lang.IFn user/implement-range
我认为这是我看不到的括号问题(我是 clojure 的新手 :))。有什么想法吗?
提前感谢您的帮助
编辑:
如果我这样调用函数,我想返回类似 (1 2 3 4) 的内容:
(implement-range 1 5)
【问题讨论】:
-
你想用
((conj nil a) (implement-range (inc a) b))做什么? -
我正在尝试以递归方式将元素添加到列表中。但是当我研究时,我将其更改为列表,而不是 conj
-
使用
((conj nil a) (implement-range (inc a) b)))),您尝试将(conj nil a)作为函数调用,(implement-range (inc a) b)作为参数。这是你的意图吗? -
哈哈,没有。我现在看到这根本没有意义。我将发布我的部分解决方案作为答案,以便您查看是否有意义,以及改进它的可能方法
标签: clojure functional-programming