*Test> ((3^40) `mod` 3) :: Int
2
*Test> ((3^40) `mod` 3)
0
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我正在使用GHCi 7.0.3.如果这不是一个错误,那么可以理解Integral/Int如何在haskell中工作的解释,或者说明解释的链接.
谢谢.
我正在关注algo-class.org课程,其中一个编程作业提供了一个格式如下的文件:
1 2
1 5
2 535
Run Code Online (Sandbox Code Playgroud)
...
有超过500万这样的行,我想在文件中读取并将其转换为整数向量的向量,如下所示:[[1 2] [1 5] [2 535] ...].
(defn to-int-vector [s]
(vec (map #(Integer/parseInt %) (re-seq #"\w+" s))))
(def ints (with-open [rdr (clojure.java.io/reader "<file>")]
(doall (map to-int-vector (line-seq rdr)))))
Run Code Online (Sandbox Code Playgroud)
所以我相信这样,我不是将整个文件保存在内存中,而只生成一个大的整数向量.但是我从中得到了OutOfMemoryError.我尝试通过运行rand-int来生成相同大小和相同格式的向量,并且工作正常.
看起来内存问题是由生成的临时对象引起的?clojure处理这样一个案例的理想方式是什么?
更新:
是的,我意识到我持有整个整数向量.我已经提高了堆大小,现在可以了.我很感兴趣的是,一个载体和500万个元素(1000万个整数)可以占用大量内存 - 我必须为jvm分配3g.有没有其他方法可以记住内存?