Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell-输入`';_Haskell - Fatal编程技术网

Haskell-输入`';

Haskell-输入`';,haskell,Haskell,我在一个.hs文件中正好有这段代码,加载时我总是得到相同的解析错误。我不认为它实际上包含任何错误-因此我目前的想法是“|”符号不是haskell想要的,但它是我的Macbook键盘上的标准符号(使用Mac OS)。有可能吗?如果有,我该怎么做?我目前正在使用TextEdit编写代码,并启用纯文本设置。请确保缩进防护装置;Haskell有大量空白 pow1 b e | (e == 0) = 1 | otherwise = b * pow1 b (e-1) 你所需要做的就是在警卫前面加上

我在一个.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)
(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)