【发布时间】:2014-06-19 14:55:57
【问题描述】:
where 是 Haskell 之后是否可以使用 guards 定义函数?
这很好用:
myMax a b = a + b - myMin a b
where myMin a b = if a < b then a else b
但是这个
myMax a b = a + b - myMin a b
where myMin a b
| a < b = a
| otherwise = b
将在 ghci 中抛出以下错误消息:
parse error (possibly incorrect indentation or mismatched brackets)
在| a < b = a对应的行上
同样,这将起作用:
myMax a b =
let myMin a b = if a < b then a else b
in a + b - myMin a b
但这不会:
myMax a b =
let myMin a b
| a < b = b
| otherwise = a
in a + b - myMin a b
我的猜测是这是因为使用 guards 实际上并没有定义变量,即使 where 和 let/in 结构需要它?我对 Haskell 很陌生,因此非常欢迎任何解释!
【问题讨论】: