【发布时间】:2013-03-31 18:59:23
【问题描述】:
在学校练习
我有这个功能
bar :: Float -> Float -> Float
bar x 0 = 0
bar 0 y = 0
bar x y = x * y
我在 GHC 中输入为
let bar x 0 = 0; bar 0 y = 0; bar x y = x * y
并评估
bar foo 0
bar 0 foo
我被要求修改 bar 以使用 '|'所以我想做类似的事情:
let bar x y = | x 0 = 0 | 0 y = 0 | x y = x * y
但是在 ghci 中我得到了
parse error on input '='
如何在 GHCi 中做到这一点? 使用模式匹配 ('|') 会改变什么吗?
【问题讨论】:
-
您原来的
bar使用模式匹配。你想了解guards。 -
你可以特别聪明,写简单
let bar | otherwise = (*)... -
去掉
=第一个守卫之前的let bar x y | x == 0 = ... | y == 0 = ... | otherwise = ...。 -
@leftaroundabout 挑剔:这假定
Num实例的某些属性并不总是成立。例如,(1/0 :: Double) * 0 /= 0 -
@ThomasM.DuBuisson:是的,当然,或者
last[1..] * 0 ≡ ⟂。我真的不是认真的。
标签: haskell