【问题标题】:empty space work-around in haskellHaskell中的空白空间解决方法
【发布时间】:2016-03-24 13:29:22
【问题描述】:

我一直在用 haskell 制作关于 i/o 和其他一些东西的小婴儿程序,我发现了一些有趣的东西。我想知道在文件中,我们可以处理空行吗?例如,我们可以计算空行的数量还是可以检索两个空行之间的数据?如果是这样,我们如何实现这样的代码片段?我对haskell真的很陌生,它让我很难理解语言的语法,所以我真的需要一些帮助来学习它。我试过了;

readFile "/tmp/foo.txt" >>= print . length . filter (== '\n');

但这只是按预期计算每一行。我怎样才能消除非空行并按照我的意愿对其余行进行一些处理?

【问题讨论】:

  • 试试filter (=='\n'),而不是filter null . lines
  • 效果很好,谢谢:)

标签: file haskell io


【解决方案1】:

如果您是 Haskell 的新手,则没有充分的理由编写像示例 sn-p 那样紧凑的代码。我会这样写

ex1 = do
  contents <- readFile "Test.hs"
  let noLines = length (filter (== '\n') contents)
  print noLines

这使得查看正在发生的事情变得稍微容易一些。

下一步是探索Prelude:有一个名为lines 的函数可以将一组文本分割成行。所以让我们分成几行并删除空行:

ex2 = do
  contents <- readFile "Test.hs"
  let nonempty = filter (/= "") (lines contents)
  print (length nonempty)

这里的nonempty 是您可以对其进行进一步处理的行列表 (:: [String])。

【讨论】:

  • 我知道我正在努力。这个声明对我来说也更好,谢谢你的帮助:)
猜你喜欢
  • 1970-01-01
  • 2012-09-17
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多