Haskell - 有一个函数返回一个空字符

标签 haskell functional-programming

我正在尝试创建一个从字符串中删除每个第 n 个元素的函数。

dropEvery :: String -> Int -> String
dropEvery str n = map (\(char, indx) -> if indx `mod` n /= 0 then char else ' ') (zip str [1..])

现在它只是用空格替换每个第 n 个元素,但是如果我希望它返回一个“空字符”,我应该在“else”之后放置什么。我知道 Haskell 中不存在这样的事情,所以问题是 - 我应该如何告诉 Haskell 不返回任何内容而继续下一个字符?

最佳答案

你不能只使用 map ,根据定义,它不能改变它所应用的集合的长度。但是,您可以通过切换到 concatMap 来使其工作而无需进行太多更改。 .此函数要求您要映射的函数返回一个列表,然后将所有结果连接在一起。你需要做的就是

dropEvery str n =
    concatMap (\(char, indx) -> if indx `mod` n /= 0 then [char] else []) (zip str [1..])

关于Haskell - 有一个函数返回一个空字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36554499/

相关文章:

haskell - Haskell 中的代码自省(introspection)是什么?

haskell - 函数长度 "a"不编译,如果启用了 OverloadedStrings 扩展

C# LanguageExt - 将多个异步调用组合成一个分组调用

ruby - #inject 和缓慢

c - 跨函数在内部共享变量

data-structures - 空间数据的数据结构

functional-programming - 原始函数式语言中的 MapReduce 的可扩展性如何?

haskell - 在 Haskell 中使用自定义二进制数据类型是个坏主意吗?

haskell - 条件 QuickCheck 属性

haskell - 需要帮助理解 Haskell 的惰性求值行为