当前位置:  开发笔记 > 编程语言 > 正文

where子句中的Haskell解析器错误

如何解决《where子句中的Haskell解析器错误》经验,为你挑选了1个好方法。

rs第一节中的定义有什么问题?

palindrome :: [a] -> [a]

palindrome xs = con xs rs
    where con a b = rev (rev a []) b
        rs = rev xs                        -- here
        where rev [] rs = rs
            rev (x:xs) rs = rev xs (x:rs)

我只是在学习Haskell,但它的语法规则让我很困惑.错误消息是

[1 of 1] Compiling Main             ( pelindrome.hs, interpreted )

pelindrome.hs:5:8: parse error on input `rs'

Johannes Sch.. 13

你的缩进是错的,我认为你只能where在那里有一个(我可能非常错.我不是一个哈克尔家伙).对于rev(空列表)的调用还缺少一个参数:

palindrome :: [a] -> [a]
palindrome xs = con xs rs
    where con a b = rev (rev a []) b
          rs = rev xs []                       -- here
          rev [] rs = rs
          rev (x:xs) rs = rev xs (x:rs)

main = print (palindrome "hello")

打印出来:

"helloolleh"

我现在要尝试理解它.无论如何,玩得开心!

编辑:现在对我很有意义.我认为这是正确的版本.对于Haskell缩进规则,请阅读Haskell Indentation



1> Johannes Sch..:

你的缩进是错的,我认为你只能where在那里有一个(我可能非常错.我不是一个哈克尔家伙).对于rev(空列表)的调用还缺少一个参数:

palindrome :: [a] -> [a]
palindrome xs = con xs rs
    where con a b = rev (rev a []) b
          rs = rev xs []                       -- here
          rev [] rs = rs
          rev (x:xs) rs = rev xs (x:rs)

main = print (palindrome "hello")

打印出来:

"helloolleh"

我现在要尝试理解它.无论如何,玩得开心!

编辑:现在对我很有意义.我认为这是正确的版本.对于Haskell缩进规则,请阅读Haskell Indentation

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有