clojure中的惰性seq将被翻译为惯用方案

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

我想在scheme中重写我在clojure制作的脚本,但我不确定如何重写

我用clojure写了这个简单的脚本。它读取一些csv文件,对它们进行一些处理,然后写入一个新的csv文件

它基于一组函数,每个函数都接受一个映射作为参数并返回一个新映射

主回路使用传感器。由按正确顺序组合这些功能而成的传感器。像这样

(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澄清了这个问题不是关于流或传感器的)。然而,我也非常忙,最近找时间回答这个问题对我来说是一个挑战。但我已经把这个问题列为重点,我会在可能的时候着手解决。