在F#中,编写用于处理stdin
中的行并写入stdout
中的行的UNIX命令行工具的惯用方式是什么?我是F#新手,已经从各种SO帖子中整理了以下模式,但该模式最后一个表达式是否更优雅/更惯用了?
#!/usr/bin/fsharpi --exec
let transform (line : string) =
SOME_FUNCTION_OF line // line transformation goes here
// is there a more idiomatic way of writing this:
Seq.initInfinite(fun _ -> System.Console.In.ReadLine())
|> Seq.takeWhile(fun line -> line <> null)
|> Seq.iter(fun x -> printfn "%s" (transform x))
答案 0 :(得分:4)
您可能会得到很多答案,因为这实际上与个人风格有关,每个人都喜欢展示自己偏爱的做事方式:)这是我的两分钱:
所以
let readLine = Console.In.ReadLine
let notEmpty = String.IsNullOrEmpty >> not
Seq.initInfinite (fun _ -> readLine())
|> Seq.takeWhile notEmpty
|> Seq.map transform
|> Seq.iter (printfn "%s")