clojure中的惰性seq将被翻译为惯用方案
我想在scheme中重写我在clojure制作的脚本,但我不确定如何重写 我用clojure写了这个简单的脚本。它读取一些csv文件,对它们进行一些处理,然后写入一个新的csv文件 它基于一组函数,每个函数都接受一个映射作为参数并返回一个新映射 主回路使用传感器。由按正确顺序组合这些功能而成的传感器。像这样clojure中的惰性seq将被翻译为惯用方案,clojure,scheme,lazy-sequences,guile,Clojure,Scheme,Lazy Sequences,Guile,我想在scheme中重写我在clojure制作的脚本,但我不确定如何重写 我用clojure写了这个简单的脚本。它读取一些csv文件,对它们进行一些处理,然后写入一个新的csv文件 它基于一组函数,每个函数都接受一个映射作为参数并返回一个新映射 主回路使用传感器。由按正确顺序组合这些功能而成的传感器。像这样 (def step1 (mapcat (comp op/line-numbers op/station
(def step1 (mapcat (comp
op/line-numbers
op/station
op/added-file-order
op/splitted-file
op/ingested-file)
))
(defn thread [path]
(sequence
(comp step1 step2 step3 step4)
(op/files-collection path)))
然后将传感器制成延迟序列。像这样
(def step1 (mapcat (comp
op/line-numbers
op/station
op/added-file-order
op/splitted-file
op/ingested-file)
))
(defn thread [path]
(sequence
(comp step1 step2 step3 step4)
(op/files-collection path)))
然后将序列延迟写入文件
我在咕哝着在guile方案中实现相同的功能(将来可能会更多)
我知道scheme有流(作为惰性序列),但我不确定其语义是否与clojure中的相同
这样的事情怎么会在计划中发生呢?这种事情的惯用方案版本是什么?s/reducer/transducer/g?@ArthurUlfeldt是的,当然我把他们弄糊涂了你还没有得到回应——可能是因为理解方案流的人之间没有太多的重叠(可能是大型方案社区中相对较小的一部分)还有那些真正了解Clojure传感器的人(我猜他们在成长,但仍然很小)。不过,我想知道如果你简化你的代码,更直接地关注你关于传感器和流的问题的核心,是否会更好。(起初我想知道您是否希望有人向您展示如何在Scheme中实现
mapcat
。)我几乎不属于传感器子集,从未学习Scheme streams,顺便说一句。@Mars感谢您的观察。我的问题的核心不是关于传感器和流。它是关于在guile scheme中处理大量csv文件的。至于传感器,我只在clojure中使用它们,因为它在我看来既酷又方便。我引用了流,因为文件比我电脑上的内存大得多,所以我认为应该是懒散的。但是,如果scheme中处理大批量的惯用/惯用方式不同,那么我洗耳恭听。@Mars我实际上非常了解scheme流,而且我刚才看过传感器,还以为它们是蜜蜂的膝盖。所以我有资格回答这个问题(呵呵,尽管OP澄清了这个问题不是关于流或传感器的)。然而,我也非常忙,最近找时间回答这个问题对我来说是一个挑战。但我已经把这个问题列为重点,我会在可能的时候着手解决。