gpt4 book ai didi

haskell - 功能段落

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

抱歉,我还不太了解 FP,我想将一系列行拆分为一系列行,假设一个空行作为段落划分,我可以在 python 中这样做:

def get_paraghraps(lines):
paragraphs = []
paragraph = []
for line in lines:
if line == "": # I know it could also be "if line:"
paragraphs.append(paragraph)
paragraph = []
else:
paragraph.append(line)
return paragraphs

你会如何在 Erlang 或 Haskell 中做这件事?

最佳答案

我也在努力学习 Haskell。这个问题的解决方案可能是:

paragraphs :: [String] -> [[String]]
paragraphs [] = []
paragraphs lines = p : (paragraphs rest)
where (p, rest) = span (/= "") (dropWhile (== "") lines)

我在哪里使用来自 Data.List 的函数.我正在使用的那些已经可以从 Prelude 获得,但您可以在链接中找到它们的文档。

这个想法是使用 span (/= "") 找到第一段.这将返回该段落和后面的行。然后我们在较小的行列表上递归,我称之为 rest .

在拆分第一段之前,我们使用 dropWhile (== "") 删除所有空行。 .吃分隔段落的空行很重要。我的第一次尝试是这样的:
paragraphs :: [String] -> [[String]]
paragraphs [] = []
paragraphs lines = p : (paragraphs $ tail rest)
where (p, rest) = span (/= "") lines

但是当我们到达最后一段时失败了,因为 rest然后是空字符串:

*Main> 段落 ["foo", "bar", "", "hehe", "", "bla", "bla"]
[["foo","bar"],["hehe"],["bla","bla"]*** 异常(exception):Prelude.tail:空列表

删除空行解决了这个问题,它还使代码将任意数量的空行视为段落分隔符,这是我作为用户所期望的。

关于haskell - 功能段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/930675/

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