[String]中的非详尽模式 - > String?

时间:2017-10-28 09:31:33

标签: haskell

所以我正在创建一个这样的函数:

 unlinhas::[String]->String
 uninhas [x] = ""
 unlinhas (x:xs) = x ++ "\n" ++(unlinhas( xs))

给定一个像["arroz","atum"]这样的字符串列表应该给"arroz\natum\n"问题是我创建的这个函数说明了非详尽的模式。

1 个答案:

答案 0 :(得分:5)

您的第一个模式[x]是一个列表,其中包含一个元素。所以Haskell编译器想知道如何处理空列表。

此外,在第一行中,您编写uninhas而不是unlinhas,因此Haskell编译器认为您编写了两个不同的函数。

但是,根据您的规范,您希望处理空列表,以便可以使用以下命令进行修复:

unlinhas:: [String] -> String
unlinhas [] = ""
unlinhas (x:xs) = x ++ "\n" ++(unlinhas( xs))

您可以进一步清理代码,并将其写为:

unlinhas:: [String] -> String
unlinhas [] = ""
unlinhas (x:xs) = x ++ '\n' : unlinhas xs