4

IllegalArgumentException Don't know how to create ISeq from: 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ます。それはまた、連結しながら削減しようとするものでなければなりません。

4

2 に答える 2

1

と を連結しようとしてい#(reduce + b)ます#(reduce + s)。それは機能しませ#(reduce + b)(fn* [] (clojure.core/reduce clojure.core/+ your-namespace/b))。関数を連結することはできません。多分あなたは意味(reduce + b)がありませんが、その結果は数値であり、数値を連結することもできないため、意味がありません。[(reduce + b) (reduce + s)]または(map + b s)またはという意味かもしれません (+ (reduce + b) (reduce + s))が、実際に何を達成しようとしているのかを知らずに、ここでやみくもに推測することしかできません。

これらの行:

           (cons (nth (nth (nth phr n) 1) 0) b)
           (cons (nth (nth (nth phr n) 1) 1) s)

も奇妙です。phr は long の seqs の seqs の seq ですか?

あなたのコレクションはこの形式ですか[[[0 0 ,,,] [0 1 ,,,] ,,,] ,,,](cons 0 を b に、1 を s にします)。もしそうなら、それらの値にアクセスするための関数を書くべきでしょう。

于 2012-10-25T06:10:03.153 に答える
0

n番目は値を返します。

を行う場合(cons (nth (nth (nth phr n) 1) 0) b)、の評価後、Seqではなく値に(nth phr n)次を適用します。nth

のようなものでコードをテストすると(phrase-length "123")、発生するエラーが発生します。

于 2012-10-24T23:16:55.393 に答える