1

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が怠惰なシーケンスであることを知っていますが、何かが欠けています...

お時間をいただき、誠にありがとうございます。

4

1 に答える 1

3

あなたがしている必要があります

(reduce + (take-while (partial > 1000) a))

(a)を呼び出そうとしますaが、関数ではありません。

于 2012-01-04T14:44:30.160 に答える