Ich bin neu in Clojure und Lisp, aber liebe es so weit. Ich versuche derzeit, die Fähigkeit von Lazy-Seq und Clojure zu verstehen, unendliche Sequenzen zu definieren. Ich habe den folgenden Code:Anfänger Clojurist Lazy Sequenzfehler: Ich weiß nicht, wie man ISeq erstellt von: java.lang.Long
(defn geometric
([] geometric 1)
([n] (cons n (lazy-seq (geometric (* n 1/2))))))
Wenn ich laufen:
(geometric)
in meinem REPL, es gibt 1 zurück, wie erwartet. Allerdings, wenn ich laufen,
(take 10 (geometric))
bekomme ich folgende Fehlermeldung:
IllegalArgumentException Don't know how to create ISeq from:
java.lang.Long clojure.lang.RT.seqFrom
Was erwarte ich zu bekommen ist:
(1 1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256 1/512)
Warum bin ich diesen Fehler? Wenn ich richtig verstanden habe, sollte man in der Lage sein, die Lazy-Sequenz zu konsumieren, und Take sollte die ersten zehn Werte der Sequenz zurückgeben, die rekursiv ausgewertet werden.