Clojure中的IllegalArgumentException错误
我得到这个错误: IllegalArgumentException不知道如何从以下位置创建ISeq:clojure.lang.Symbol clojure.lang.RT.seqFrom RT.java:542 当我调用此函数时:Clojure中的IllegalArgumentException错误,clojure,illegalargumentexception,Clojure,Illegalargumentexception,我得到这个错误: IllegalArgumentException不知道如何从以下位置创建ISeq:clojure.lang.Symbol clojure.lang.RT.seqFrom RT.java:542 当我调用此函数时: (defn my-butlast [lista] (loop [c lista last ()] (if (= (count c) 1) last (recur (c
(defn my-butlast [lista]
(loop [c lista
last ()]
(if (= (count c) 1)
last
(recur (concat last (first c))
(pop c)))))
函数应该返回一个列表,其中包含与其输入列表相同的元素,但不包括最后一个元素,或者如果该元素为空
只有当列表中有两个或更多类似的元素时,才会发生错误:
(my-butlast '(a b))
concat:所提供的coll中元素的串联,这些元素取自。您的错误似乎与未传递正确的参数类型一致。您可以尝试使用conj代替concat,或者将第二个参数包装到向量中的concat
如果选择conj,请确保理解conj到列表与conj到向量之间的不同行为:concat:所提供的coll中的元素从中串联。您的错误似乎与未传递正确的参数类型一致。您可以尝试使用conj代替concat,或者将第二个参数包装到向量中的concat
如果您选择conj,请务必理解conj到列表与conj到向量之间的不同行为:我建议使用不同的方法,在我看来更简单一点。尝试类似于反向rest反向列表的方法
如果这就是你所需要的,就不必复杂化了。如果你真的有这样开始的理由,只要读一读concat,那就是错误的来源。我会建议一种不同的方法,在我看来更简单一点。尝试类似于反向rest反向列表的方法 如果这就是你所需要的,就不必复杂化了。如果你真的有这样开始的原因,只要读一读有关concat的内容,这就是错误的来源。正如其他人所说,concat只接受集合 下面是令人不快的表达: 最后第一个c 请查看这些链接,因为它们提供了一些有用的技术来帮助调试Clojure代码: 正如其他人所说,concat只接受集合 下面是令人不快的表达: 最后第一个c 请查看这些链接,因为它们提供了一些有用的技术来帮助调试Clojure代码: