我试着用保护方程来定义函数。为什么它在GHCi中不起作用?谢谢。
Prelude> :{
Prelude| maxThree :: Integer -> Integer -> Integer -> Integer
Prelude| maxThree x y z
Prelude| x >= y && x >= z = x
Prelude| y >= z = y
Prelude| otherwise = z
Prelude| :}
<interactive>:77:1: error: Parse error in pattern: x >= y发布于 2019-07-27 22:54:39
你的语法错了。不要为提示符已经包含|这一事实所迷惑!您所写的内容如下:
maxThree :: Integer -> Integer -> Integer -> Integer
maxThree x y z
x >= y && x >= z = x
y >= z = y
otherwise = z如您所见,这显然是错误的。警卫总是从垂直条形|开始,但是你忽略了它。我假设您对Prelude|提示符已经包含了|这一事实感到困惑;这是GHCi UI的一部分,而不是被认为是您输入的代码的一部分。如果您想在GHCi中键入一个保护程序,请这样做:
Prelude> :{
Prelude| maxThree :: Integer -> Integer -> Integer -> Integer
Prelude| maxThree x y z
Prelude| | x >= y && x >= z = x
Prelude| | y >= z = y
Prelude| | otherwise = z
Prelude| :}请注意,我是如何将代码输入到GHCi 中的--与将其键入文件的完全相同,包括需要相对于定义的开头缩进守卫这一事实。
https://stackoverflow.com/questions/57236600
复制相似问题