【问题标题】:Find and return first string which contains char (Haskell)查找并返回第一个包含 char 的字符串(Haskell)
【发布时间】:2021-10-24 14:58:55
【问题描述】:

我正在尝试编写一个循环遍历字符串列表的函数,如下所示:

["     |     ","     #     ","     *     ","     |     ","     #     "]

我正在尝试查找并返回包含'|', '#', or '*' 的第一个元素,具体取决于用户的选择。

我想出了这个解决方案:

test :: Char -> [String] -> Maybe Char
test c (x:xs) = find (== c) $ concatMap (filter (/=' ')) (reverse xs)

我得到这个输出:

ghci> test '*' ["     |     ","     #     ","     *     ","     |     ","     #     "]
Just '*'

找到元素,但我希望它返回元素而不改变它(删除空格)。如何在不过滤空格的情况下做到这一点?

这是我想要的输出:

ghci> test '*' ["     |     ","     #     ","     *     ","     |     ","     #     "]
"     *     "

【问题讨论】:

  • 你想要的输出值的类型是什么?
  • 我希望输出是字符串类型
  • 是的,我知道,这是一个指导性问题。 :)

标签: haskell find list-comprehension


【解决方案1】:

由于您已使用 标记您的问题,

test :: Eq a => a -> [[a]] -> Maybe [a]
test c xs = listToMaybe [s | s <- xs, elem c s]

应该做的工作。

> test '*' ["     |     ","     #     ","     *     ","     |     ","     #     "]
Just "     *     "

> test '-' ["     |     ","     #     ","     *     ","     |     ","     #     "]
Nothing

> :i listToMaybe
listToMaybe :: [a] -> Maybe a   -- Defined in `Data.Maybe'

【讨论】:

    猜你喜欢
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    相关资源
    最近更新 更多