Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取haskell中两个空行之间的文本_Haskell_Io - Fatal编程技术网

获取haskell中两个空行之间的文本

获取haskell中两个空行之间的文本,haskell,io,Haskell,Io,嘿,我又问了哈斯克尔一个问题。我在中问了一个问题,现在我可以完美地获取空行,现在我想尝试获取haskell中两个特定空行之间的文本(例如,我将获取开头和第一个空行之间的文本)在haskell中,我想不出任何方法可以做到这一点,因为我无法理解语法并有效地使用它,所以我真的需要您的帮助。我做一些io工作的实践如下:` main=do{ readFile "/tmp/foo.txt" >>= print . length . filter (== '?'); readFile "/tmp/

嘿,我又问了哈斯克尔一个问题。我在中问了一个问题,现在我可以完美地获取空行,现在我想尝试获取haskell中两个特定空行之间的文本(例如,我将获取开头和第一个空行之间的文本)在haskell中,我想不出任何方法可以做到这一点,因为我无法理解语法并有效地使用它,所以我真的需要您的帮助。我做一些io工作的实践如下:`

main=do{
readFile "/tmp/foo.txt" >>= print . length . filter (== '?');
readFile "/tmp/foo.txt" >>= print . length . words;
readFile "/tmp/foo.txt" >>= print . length . filter (== '.');
readFile "/tmp/foo.txt" >>= print . length . filter null . lines;
}`

有了这个,我可以数句子的数量,问号的数量,空行的数量等等。现在我想得到两个空行之间的文本。如果你能帮我做最后一个我无法解决的练习,我将非常高兴。从现在开始谢谢你

最简单的方法是使用函数
分组方式
过滤器

  • 用于在字符串列表中拆分
    字符串
    (每个元素一行)
  • groupBy
    对所有非空行进行分组-这应该是最困难的部分,如果后续两个元素为非空,则必须编写一个谓词:
    groupBy(\x y->?)
  • 然后
    过滤出shape的元素
    [“”]
下面是ghci中的一些示例用法

λ > import Data.List
λ > let groupify = ???
λ > l <- readFile "~/tmux.conf"
λ > map length $ groupify l
[4,7,3,1,4,2,2,5,4,3,3,2,7,4,4,4,3,3,3,2]
λ>导入数据列表
λ>设分组=???
λ>l映射长度$groupify l
[4,7,3,1,4,2,2,5,4,3,3,2,7,4,4,4,3,3,3,2]
您可以在我的网站上查看我的tmux配置文件的内容

更新 这个问题的解决办法是

groupify=filter(/=[“”])。groupBy(\x y->x/=“”&&y/=“”)。行


您可以尝试模式匹配,它字面上说明了它的功能:

betweenEmptyLines :: [String] -> [String]
betweenEmptyLines [] = []
betweenEmptyLines ("":line:"":rest) = line:(betweenEmptyLines $ "":rest)
betweenEmptyLines (line:rest) = betweenEmptyLines rest
工作原理:

> betweenEmptyLines ["foo", "", "the bar", "", "and", "also", "", "the baz", "", "but", "not", "rest"]
["the bar","the baz"]

使用括号和分号有什么特别的原因吗?Haskell的语法设计是为了让你不需要它们,惯用的风格是不使用它们。你看过库吗?哦,我不知道当我删除分号和括号时,代码不起作用,你需要使用。编程就是使用你现有的工具来寻找问题的解决方案。你不应该期望为每一个问题都找到一个教程。入门教程会教你基本的解决问题的工具,也会教你一些基本的概念,比如语法,这是你进一步学习的要求。但是如果字符串是一个段落呢?在这种情况下,haskell如何得到正确答案?假设在两个空行之间,我们正在阅读的文件中有一个很长的段落。在这种情况下我们应该怎么做?根据该算法的结果将是一个字符串列表,其中该列表中的每个列表都是一个行列表,即一个段落。正如user2407038所解释的,该算法返回一个字符串列表,其中每个列表元素都只是一个段落,去掉空行,如果你仔细看我的tmux配置,里面有两行空行!