在这个Haskell代码中,你能在“b2”结束时看到什么错误?我相信没有错误,但是这个代码在文件Q3.hs中:
let idPnumber a1 b2= take 3 a1 == take 3 b2
给出错误:
Q3.hs:1:45: error:
parse error (possibly incorrect indentation or mismatched brackets)
|
1 | let idPnumber a1 b2= take 3 a1 == take 3 b2
| ^
答案 0 :(得分:0)
如果要编译Haskell源文件,如Q3.hs
,则程序“顶层”的函数定义需要具有如下语法:
idPnumber a1 b2= take 3 a1 == take 3 b2
没有任何let
。相反,let
在函数中使用来为表达式命名,如下所示:
idPnumber a1 b2 = let threeA1 = take 3 a1
threeB2 = take 3 b2
in threeA1 == threeB2
和 - 在这种情况下 - 必须后跟in
子句。 (还有其他一些let
可以使用的方法,不需要in
,但这些方法不适用于此。)
由于您的文件中缺少in
关键字,因此GHC已经无可救药地混淆了,并且给了您一条没有多大意义的错误消息。 (如果你添加了一个in
子句,你仍然会收到一条错误消息,但它会解释GHC正在寻找一个“顶级声明”,这个定义类似于上面没有任何{{ 1}}关键字。
请注意,可以在GHCi交互式提示符下使用let
,但这是因为交互式提示的行为与编译文件中的程序不同。