haskell 如果错误

标签 haskell

我正在 Haskell 中开发回文检查器,但我们必须使用 head 和 last。我的错误与 if 语句有关,但我尝试了许多变体,但我无法弄清楚为什么 if 是一个问题。请帮忙!谢谢!

palindrome2::String->Bool
palindrome2 xs = while xs==notEmpty if head xs == last xs then True else False

最佳答案

检查字符串是否为回文的最简单方法可能是检查它是否等于其自身的反转版本:

isPalindrome :: String -> Bool
isPalindrome str = str == reverse str

但是既然您说必须使用 headtail,我将演示使用这些函数的实现:

palindrome2::String -> Bool
palindrome2 [] = True
palindrome2 xs = head xs == last xs && palindrome2 (take (length xs - 2) (tail xs))

我不确定你想用 while 做什么。也许命令式语言会带来某种困惑?此实现以递归方式工作,检查列表的头部是否等于最后一项,如果相等则嵌套到列表中。如果第一项和最后一项不相等(字符串不是回文),或者达到基本情况(字符串是回文),则计算终止。

请注意,第一个实现效率更高。

关于 haskell 如果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40413635/

相关文章:

haskell - 旧 Haskell 代码中的 getArgs 问题

haskell - 输入 'if' 解析错误

haskell - 在 monad 转换器中,为什么已知的 monad 是内部的?

haskell - 实时持久队列总数

haskell - 乔姆斯基层次结构中类型类和语法级别之间的对应关系

haskell - Yesod/持久一对一查询

haskell - Data.ByteString 中的 findSubstrings 和 breakSubstring

windows - Cabal 在 Windows Server 2008 上安装带 64 位 OpenSSL 库的 HsOpenSSL

debugging - 是否可以在 Haskell 中将类型强制为类?

Haskell IO Monad 和内存使用