我真的是 Haskell 的新手,并且一直在经历 99 problems translation.这是我对数字 9 的解决方案:
pack :: (Eq a) => [a] -> [[a]]
pack (xs)
| null xs = []
| otherwise =
let (matched, unmatched) = span (== head xs) xs
in [matched] ++ pack unmatched
我不明白我被允许做什么
| null xs = []
当类型签名说函数返回 [[]]
.我见过针对同一问题的其他解决方案做同样的事情。我的意思是,我不是在提示,但这是特别允许的吗?有什么需要注意的警告吗?
如果有帮助,我在默认的 Windows 7 Haskell Platform 2013.2.0.0 安装上使用 GHCi。
最佳答案
[]
是一个空列表。它有以下类型:
[] :: [b] -- Note: I'm using b instead of a because your function already uses a
那
b
可以是一切。可以选择b
这样[b] ~ [[a]]
? (〜是类型的平等)?是的,只需使用 b ~ [a]
[] 的类型变为:[] :: [b] :: [[a]] -- When b ~ [a]
所以
[]
也是 [[a]]
类型的值. []
是任何类型列表的有效值,无论是 a 列表还是 a 列表列表。
关于haskell - 为什么 Haskell 让我返回一个空列表,其中列表中的列表是预期的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18432355/