pow1 b e
| (e == 0) = 1
| otherwise = b * pow1 b (e-1)
Run Code Online (Sandbox Code Playgroud)
我在.hs文件中有完全相同的代码,加载时我总是得到相同的解析错误.我不认为它实际上包含任何错误 - 所以我目前的想法是"|" 标志不是哈斯克尔想要的,但它是我的Macbook键盘上的标准键盘(使用Mac OS).是否有可能,如果是这样,我该怎么回事呢?我正在使用TextEdit编写代码,并打开纯文本设置.
小智 15
一定要缩进守卫; Haskell有很大的空白.
pow1 b e
| (e == 0) = 1
| otherwise = b * pow1 b (e-1)
Run Code Online (Sandbox Code Playgroud)
小智 5
您需要做的就是在警卫面前添加空格,代码将正常工作.
pow1 b e
| (e == 0) = 1
| otherwise = b * pow1 b (e-1)
Run Code Online (Sandbox Code Playgroud)
(user142019已经说明了这个解决方案,但我觉得需要解释才能理解解决方案)
说明:
Haskell使用空格缩进来控制代码的结构和范围.其他编程语言(例如Java)依赖于大括号来执行此操作,而Haskell则使用缩进.
您的代码不起作用,因为Haskell期望函数体在比函数定义更深的缩进级别上,以及在同一级别上的其他函数定义.将尝试将同一缩进级别上的任何新行解释为新的函数定义,不允许他们以警卫开始,|因此会得到解析错误.
Mac字符键和文本编辑器没有任何问题.
关于缩进的主题:选项卡不起作用.因此,您必须手动输入空格或更改编辑器的选项卡设置以插入4个空格(我建议)而不是制表符.(Notepad ++允许这样,例如,它是我与Haskell一起使用的首选).