gpt4 book ai didi

string - 将字符串拆分为 Clean 中的字符串列表

转载 作者:行者123 更新时间:2023-12-02 03:54:17 25 4
gpt4 key购买 nike

由于资源有限,我需要在这里提出一个问题。我一直在函数式编程方面苦苦挣扎,无休止的 Haskell 教程并不能真正帮助我。所以我想用 Clean 语言实现的是将 "car cow cat " 这样的字符串拆分为字符串列表 ["car","cow","cat"] 。您能否为我提供详细的答案(不一定是完整的代码),关于如何迭代此字符串,特别是新构造的字符串添加到列表中的部分?

最佳答案

我将提供一个简单的解决方案。在 Haskell 中有无数更好的方法可以做到这一点,但对于函数式编程的新手来说,这是我能想到的最简单的方法,无需使用任何特定的 Haskell 函数,如 takeWhile,甚至任何折叠和映射......

您基本上想模拟列表上的迭代,所以这是我的建议:

  1. 定义一个函数,该函数将采用字符串和分割字符。该函数将返回一个字符串列表 - spliton::String -> Char -> [String]

  2. 要在列表上移动,我们需要吞噬字符,直到遇到一个 split 字符。我们还想保存到目前为止保存的单词以及整个单词列表。为此,我们将定义一个子函数来保存状态

    spliton'::String -> Char -> String -> [String] -> [String]

    spliton'[]_sofar res = res++ [sofar]

    我还包含了最简单的子句 - 一个空字符串。当字符串为空时,我们只想返回到目前为止保存的内容。

  3. 现在让我们继续讨论实际的递归函数:如果我们点击分割字符,我们会将迄今为止保存的字符串添加到列表中,并以空的当前状态字符串重新启动如果我们没有命中分割字符,我们将把该字符添加到当前状态字符串

    spliton' (currchar:rest) splitby sofar res
    | currchar==splitby = spliton' rest splitby "" (res++[sofar])
    | otherwise = spliton' rest splitby (sofar++[currchar]) res

所以,总结一下我们的代码:

spliton :: String -> Char -> [String]
spliton source splitchar = spliton' source splitchar [] []

spliton' :: String -> Char -> String -> [String] -> [String]
spliton' [] _ sofar res = res ++ [sofar]
spliton' (currchar:rest) splitby sofar res
| currchar==splitby = spliton' rest splitby "" (res++[sofar])
| otherwise = spliton' rest splitby (sofar++[currchar]) res

注意:但这不会消除空字符串 - 这意味着如果您有许多多余的空格 - 您会将它们添加到列表中。我会让您思考如何处理这种情况 - 希望这可以帮助您开始。

关于string - 将字符串拆分为 Clean 中的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26357128/

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