Helo、clojureを学ぶために、シーケンスに作用するclojure.core関数に興味を持った。最近、奇妙な振る舞いに気づき、次の表現の違いについて説明したいと思います。
私がやろうとしていることはこれです:
user=> (reduce + (take-while (partial > 1000) (iterate inc 1)))
499500
ただし、getを使用して保存(iterate inc 1)
するとdef
、次のエラーが発生します。
user=> (def a (iterate inc 1))
#'user/a
user=> (reduce + (take-while (partial > 1000) (a)))
java.lang.ClassCastException: clojure.lang.Cons cannot be cast to clojure.lang.IFn (NO_SOURCE_FILE:0)
誰かがiterate inc 1
それを式に直接保存することと使用することの違いを説明してもらえますか?私はそれa
が怠惰なシーケンスであることを知っていますが、何かが欠けています...
お時間をいただき、誠にありがとうございます。