小编Phi*_*lip的帖子

逆时针REPL的最后输入?

是否可以浏览您在Eclipse中输入逆时针REPL的历史?就像按下向上箭头或ctrl-p或其他在其他repl中工作的其他东西一样?谢谢!-Philip

eclipse clojure read-eval-print-loop counterclockwise

15
推荐指数
1
解决办法
1410
查看次数

使用recur,lazy seq的Clojure堆栈溢出?

我已经阅读了其他人关于在Clojure中出现堆栈溢出问题的问题,而这个问题往往是在某个地方构建一个懒惰的序列.这似乎是这里的问题,但对于我的生活,我无法弄清楚在哪里.

这是代码,代码之后是一些解释:

(defn pare-all []
  "writes to disk, return new counts map"
(loop [counts (counted-origlabels)
     songindex 0]
(let [[o g] (orig-gen-pair songindex)]
  (if (< songindex *song-count*) ;if we are not done processing list
    (if-not (seq o) ;if there are no original labels
      (do
        (write-newlabels songindex g);then use the generated ones
        (recur counts (inc songindex)))
      (let [{labels :labels new-counts :countmap} (pare-keywords o g counts)] ;else pare the pairs
        (write-newlabels songindex labels)
        (recur new-counts (inc songindex))))
    counts))))
Run Code Online (Sandbox Code Playgroud)

存储在最初从函数"counting-origlabels"中检索的"计数"中的映射.地图具有字符串键和整数值.它是600左右的项目,并且迭代期间值更新但长度保持不变,我已经验证了这一点.

"orig-gen-pair"函数从文件中读取并返回一对短序列,每个序列有10个左右的项目.

"write-newlabels"函数只是将传递的序列命名为磁盘,没有任何其他副作用,也没有返回值.

"Pare-keywords"返回短序列和"计数"映射的更新版本.

我只是没有看到懒惰的序列可能导致这里的问题! …

clojure overflow lazy-evaluation

5
推荐指数
1
解决办法
1318
查看次数

在clojure中懒洋洋地构建

我已经开始学习clojure,但是我无法绕过某些概念.例如,我想在这里做的是采取这个函数并转换它,以便它懒洋洋地调用get-origlabels.

(defn get-all-origlabels []
    (set (flatten (map get-origlabels (range *song-count*)))))
Run Code Online (Sandbox Code Playgroud)

我的第一次尝试使用递归但是炸毁了堆栈(歌曲数量大约是10,000).我无法弄清楚如何使用尾递归来做到这一点.

get-origlabels每次调用时都会返回一个集合,但值通常会在调用之间重复.get-origlabels函数实际上做的是读取一个文件(每个值的一个不同的文件,从0到song-count -1)并将一个存储在其中的单词返回到一个集合中.

任何指针将不胜感激!

谢谢!-Philip

clojure set lazy-evaluation

2
推荐指数
1
解决办法
580
查看次数