gpt4 book ai didi

haskell - 如何使用 Haskell 和海龟库从文件流式传输时删除行

转载 作者:行者123 更新时间:2023-12-02 20:53:51 27 4
gpt4 key购买 nike

假设我想从一个文件流式传输到另一个文件,但我想跳过输入文件的前 n 行。如何在不首先使用“fold”折叠整个第一个文件的情况下执行此操作?

import Turtle
main = output "/tmp/b.txt" (f (input "/tmp/a.txt"))

“f”应该是什么来完成这个任务?

ps:我没有足够的声誉来创建“haskell-turtle”标签。

最佳答案

我认为这是正确的代码:

import Data.IORef
import Turtle

drop :: Int -> Shell a -> Shell a
drop n s = Shell (\(FoldM step begin done) -> do
ref <- newIORef 0
let step' x a = do
n' <- readIORef ref
writeIORef ref (n' + 1)
if n' < n then return x else step x a
foldIO s (FoldM step' begin done) )

...不过我可能会将其称为 drop 以外的名称,以避免与 Prelude 发生冲突。

它与 Turtle.Prelude.limit 几乎相同(请参阅 source code 进行比较)。唯一的区别是我颠倒了 if 语句的 thenelse 子句。

如果这解决了您的问题,那么我会将其添加到 Turtle.Prelude 中。

关于haskell - 如何使用 Haskell 和海龟库从文件流式传输时删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28421469/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com