Haskell-输入`';
我在一个.hs文件中正好有这段代码,加载时我总是得到相同的解析错误。我不认为它实际上包含任何错误-因此我目前的想法是“|”符号不是haskell想要的,但它是我的Macbook键盘上的标准符号(使用Mac OS)。有可能吗?如果有,我该怎么做?我目前正在使用TextEdit编写代码,并启用纯文本设置。请确保缩进防护装置;Haskell有大量空白Haskell-输入`';,haskell,Haskell,我在一个.hs文件中正好有这段代码,加载时我总是得到相同的解析错误。我不认为它实际上包含任何错误-因此我目前的想法是“|”符号不是haskell想要的,但它是我的Macbook键盘上的标准符号(使用Mac OS)。有可能吗?如果有,我该怎么做?我目前正在使用TextEdit编写代码,并启用纯文本设置。请确保缩进防护装置;Haskell有大量空白 pow1 b e | (e == 0) = 1 | otherwise = b * pow1 b (e-1) 你所需要做的就是在警卫前面加上
pow1 b e
| (e == 0) = 1
| otherwise = b * pow1 b (e-1)
你所需要做的就是在警卫前面加上空格,代码就可以正常工作了
pow1 b e
| (e == 0) = 1
| otherwise = b * pow1 b (e-1)
(user142019已经说明了这个解决方案,但是我觉得需要一个解释来理解这个解决方案)
说明:
Haskell使用空格缩进来控制代码的结构和范围。其他编程语言(比如Java)依赖于花括号来实现这一点,而Haskell则使用缩进
您的代码不起作用,因为Haskell希望函数体位于比函数定义更深的缩进级别,而其他函数定义位于同一级别。同一缩进级别上的任何新行都将被尝试解释为新的函数定义,它们不允许以guard|
开头,因此会出现解析错误
Mac字符键和文本编辑器都没有问题
关于缩进主题:制表符不起作用。因此,您必须手动输入空格或更改编辑器的制表符设置,以插入4个空格(我建议使用空格)而不是制表符。(记事本++允许这样做,例如,它是我与Haskell一起使用的首选)。除了记住缩进之外,我在第一次启动Haskell时看到了这句话: 请注意,函数名及其参数后面没有=, 在第一个守卫面前。很多新手会犯语法错误,因为他们有时会把它放在那里 这也很重要
@Greg Haskell无法识别制表符
“\t”
。缩进/格式化时请使用空格而不是制表符 我在保护表达式(“\t”表示制表符)后使用制表符而不是空格时出现此错误:
我强烈建议使用一个好的Haskell编辑器(Vim、Emacs、Sublime Text 2)而不是TextEdit。另外,要添加的是:使用空格缩进,而不是制表符缩进。(例如,确保编辑器将制表符转换为空格。)Haskell有大量的空白,除非您想在编写代码时处处使用括号
pow1 b e
| (e == 0) = 1
| otherwise = b * pow1 b (e-1)
pow1 b e
| (e == 0)\t= 1
| otherwise = b * pow1 b (e-1)