math.combinatoricsのドキュメントには、すべての関数が遅延シーケンスを返すと記載されています。
ただし、大量のデータでサブセットを実行しようとすると、
(last (combinatorics/subsets (range 20)))
;OutOfMemoryError Java heap space clojure.lang.RT.cons (RT.java:559)
OutOfMemory エラーが発生します。
ランニング
(last (range))
CPU を燃やしますが、エラーは返しません。
Clojure は、この Stack Overflow question で説明されているように、「頭を抱えている」ようには見えません。
なぜこれが起こっているのですか? また、サブセットでより大きな範囲を使用するにはどうすればよいですか?
アップデート
コメントが示唆するように、一部の人々のコンピューターで動作するようです。だから私は私のシステム構成を投稿します
Mac (10.8.3) を実行し、Clojure (1.5.1) をHomebrewでインストールしました。
私のJavaバージョンは次のとおりです。
% java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06-451-11M4406)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01-451, mixed mode)
デフォルト設定を変更していません。~/.m2
また、フォルダーを削除して、すべての依存関係を再インストールしました。
私のprojects.clj。
そして、私が使用したコマンドはこれでした
% lein repl
nREPL server started on port 61774
REPL-y 0.1.10
Clojure 1.5.1
=> (require 'clojure.math.combinatorics)
nil
=> (last (clojure.math.combinatorics/subsets (range 20)))
OutOfMemoryError Java heap space clojure.lang.RT.cons (RT.java:570)
or
OutOfMemoryError Java heap space clojure.math.combinatorics/index-combinations/fn--1148/step--1164 (combinatorics.clj:64)
私は同僚のラップトップでこの問題をテストしましたが、彼も同じ問題を抱えていましたが、彼も Mac を使用していました。