Haskell 中的 guards 也可以这样用
通常我们用 guards 来定义函数
例:
- mySigNum n | n > 0 = 1
- | n < 0 = -1
- | otherwise = 0
复制代码
这样我们调用这个函数时必须给一个参数
例:
- *Main> mySigNum 0
- 0
- *Main> mySigNum 3
- 1
- *Main> mySigNum (-3)
- -1
复制代码
但 guards 也可以用于无参函数(也就是常量):
- f1 | 1 > 2 = False
- | 1 < 2 = True
- | otherwise = True
- -- 这样调用 f1 就可以得到 True
复制代码
这里的 f1 的类型为:
*Main> :t f1
f1 :: Bool
上面的函数相当于:
- f3 = if 1 > 2 then False else True
复制代码
也可以在这样的 guards 中应用变量:
例:
- x = 1
- y = 2
- f2 | x > y = -1
- | x < y = 1
- | otherwise = 0
- -- 这里调用 f2 就可以得到 1
复制代码
这里的 f2 的类型为:
*Main> :t f2
f2 :: Integer
[ 本帖最后由 izhier 于 2009-4-18 10:05 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
就是一种简化过的 Haskell 撒,在 Haskell Report 中用来描述一些语法,例如 list comprehension, 例如 do,是被如何处理的,以及它们的语意是什么。在 GHC 中称为 Core.
嗯
想问一下,什么是 haskell kernel 呀?
你怎么定义语法糖?另外,我觉得也没有必要过分深究什么是语法糖什么不是,掌握它们的语法语义及相互之间的关系就可以了。
是用英语描述的。另外,再懂点 BNF 就可以了。
有时间就抽空看一遍吧,也不难。
再问一下:
haskell kernel 是不是不含任何语法糖的 Haskell 代码 ?
看不太懂
Haskell 98 Report 是用 haskell kernel 描述的吗?
看来,看懂那个还需要一些时日呀!
guard 本身是 expression 的一部分,而不是独立的 expression, 看下 Haskell 98 Report 你就明白了。
问一下:
guards 属于表达式级别的吗?(就像 if..then..else)