验证函数是否是haskell中的回文



我尝试使用一个函数来计算列表的反向。所以我可以在其他函数中使用它,也就是回文函数,但总是会出错。第一个有效。

这是代码:

rev :: [a] -> [a]
rev [] = []
rev (x:xs) = rev xs ++ [x]
palindrome :: [a] -> Bool
palindrome [] = True
palindrome (x:xs) = if xs == rev (x:xs) then True else False

我必须提到的是,我必须使用签名:[a] -> Bool

总有一天,我会集中精力提出一个大问题来解决初学者列表中常见的两个错误:认为[x]与任何长度的列表匹配,以及认为列表中的任何函数都必须具有[]x:xs模式。这个问题就是后者的一个例子。当你做同样的事情而不考虑列表长度时,你不需要多个模式!只要palindrome xs = ...就可以了。考虑到这一点,尝试再次编写palindrome函数;你的错误将作为副作用被修复。

最新更新