string - 在 Haskell : [String] -> String 中创建连接函数

标签 string list haskell fold

我在让这个功能工作时遇到了很多麻烦:

concatenate :: [String] -> String

它旨在简单地获取字符串列表并返回单个字符串,该字符串是列表中每个元素从头到尾连接的结果。我试图留在 map , foldl , 和 foldr功能。我觉得我知道这些函数的概念做得很好,但我遇到的最常见的问题是我遇到了类型冲突。例如,GHC 将期望一个 [Char],我将输入显然试图在我不知道的情况下使用 [[Char]] 的代码。

例如:concatenate (x:xs) = foldr (++) x (concatenate xs)
我得到以下编译错误:
Couldn't match type `Char' with `[Char]'
Expected type: [[Char]]
  Actual type: String
In the return type of a call of `concatenate'
In the third argument of `foldr', namely `(concatenate xs)'
In the expression: foldr (++) x (concatenate xs)

我对 Haskell 很陌生,所以请随意大笑。只要还包括适合新手的解释,就可以预料到苛刻并受到欢迎。感谢您的任何帮助。

最佳答案

您实际上不需要那里的递归调用。函数foldr已经模拟了递归调用。您需要做的就是使用:

concatenate :: [String] -> String
concatenate ls = foldr (++) "" ls

请记住,有一个 concat function已经,这是更通用的,因为它适用于任何列表列表(而不是简单的字符串列表)。

关于string - 在 Haskell : [String] -> String 中创建连接函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575452/

相关文章:

javascript - 奇怪的 Javascript 字符串用 $& 替换行为

String.prototype.replace 函数中的 Javascript 'this' 关键字

python - 对于 pandas 数据框中的特定单元格,删除列表的元素

haskell - 自定义流类型如何影响位置信息。秒差距?

haskell - 在类型声明映射中使用类型同义词

C代码破译代码

python - 拆分和剥离列表python中的元素

list - 检查2个列表是否有相等的元素 Haskell

haskell - 当累加器满足特定条件时,如何从haskell中的折叠函数中突破?

javascript - 想要在 javascript 中编写正则表达式,它将检查所有提到的字符是否至少存在