gpt4 book ai didi

Haskell:如何将字符串转换为 bool 矩阵

转载 作者:行者123 更新时间:2023-12-03 22:16:09 27 4
gpt4 key购买 nike

我需要一些 Haskell 方面的帮助。我想读取一个字符串并将该字符串转换为 bool 值列表的列表。例如 "LLL\nbbb\nLLL" 应该生成以下列表:[[True,True,True],[False,False,False],[True,True, True]] 。其他任何事情都应该被忽略。

我是函数式编程的新手。我尝试了以下方法:

StringParse :: String -> Matrix
StringParse s =
case s of
"L" -> Matrix [[True]]
"b" -> Matrix [[False]]

数据类型为矩阵:

数据矩阵 = 矩阵 [[Bool]]

最佳答案

您首先将任务分解为子问题。

  • 为每个换行符将列表分成 block 。方便地,有一个标准函数可以做到这一点:lines
  • 删除您不期望的任何内容。这可能是 filter 的工作。
  • 将每个 L 转换为 True 值,将每个 b 转换为 False。这只是一个 map 操作。
  • 需要为每个 block /行完成前两个步骤,因此您再次需要使用 map 将它们都应用到行列表。
  • 将所有内容打包到 Matrix 数据构造函数中。

在 Haskell 中将所有链接在一起非常容易:

parse :: String -> Matrix
parse = Matrix . map (map decide . filter isKnown) . lines
where decide 'L' = True
decide 'b' = False
isKnown 'L' = True
isKnown 'b' = True
isKnown _ = False

这将是一个完美的解决方案。

实际上,合并第 2 步和第 3 步可能会更好:与其先挑选出我们可以处理的值,然后用不同的情况处理同一组值,不如我们可以同时进行这两项操作时间。 IMO 最好的方法是使用列表是 monad 的事实,尽管它现在可能让您感到困惑:

parse' :: String -> Matrix
parse' = Matrix . map translate . lines
where translate line = do
ch <- line
case ch of 'L' -> [True]
'b' -> [False]
_ -> []

关于Haskell:如何将字符串转换为 bool 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19818680/

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