试图反对和减少时clojure中的IllegalArguementException

试图反对和减少时clojure中的IllegalArguementException,clojure,Clojure,执行以下代码时,我收到了错误IllegalArgumentException不知道如何从以下代码创建ISeq:java.lang.Long clojure.lang.RT.seqFrom(RT.java:487): (defn phrase-length [phr] (loop [n 0 b () s ()] (if (= n (count phr)) (concat #(reduce + b) #(reduce + s)) (recur (i

执行以下代码时,我收到了错误
IllegalArgumentException不知道如何从以下代码创建ISeq:java.lang.Long clojure.lang.RT.seqFrom(RT.java:487)

(defn phrase-length [phr]
    (loop [n 0 b () s ()]
      (if (= n (count phr))
        (concat #(reduce + b) #(reduce + s))
        (recur (inc n)
               (cons (nth (nth (nth phr n) 1) 0) b)
               (cons (nth (nth (nth phr n) 1) 1) s)))))
错误发生在
concat
的行中。它必须是一种在压缩的同时尝试减少的东西。

返回一个值

当您执行
(cons(nth(nth(nth phr n)1)0)b)
时,在计算
(nth phr n)
后,您将在值中应用下一个
nth
,而不是在序列中


用类似于
(短语长度“123”)
的东西测试代码会产生错误。

您正在尝试压缩
#(reduce+b)
#(reduce+s)
。这不起作用,
#(reduce+b)
扩展到
(fn*[](clojure.core/reduce clojure.core/+your namespace/b))
。你不能使用concat函数。也许你的意思是
(reduce+b)
,但这也没有任何意义,因为结果是一个数字,你也不能计算数字。也许你是说
[(reduce+b)(reduce+s)]
(map+bs)
(+(reduce+b)(reduce+s))
但我只能在不知道您实际想要实现什么的情况下盲目猜测

这些线路:

           (cons (nth (nth (nth phr n) 1) 0) b)
           (cons (nth (nth (nth phr n) 1) 1) s)
你也很奇怪。phr是连续的还是连续的

您是否收集了此表单的
[[0,0,0][1,0,1,0][2][/code>(您在此处选择0到b,1到s)?如果是这样的话,您可能应该编写访问这些值的函数,因为了解发生了什么是一件烦琐的事情