Haskell 中的 guards 也可以这样用

发布于 2022-08-21 20:27:16 字数 1270 浏览 19 评论 8

通常我们用 guards 来定义函数
例:

  1. mySigNum n | n > 0 = 1
  2.                  | n < 0 = -1
  3.                  | otherwise = 0

复制代码
这样我们调用这个函数时必须给一个参数
例:

  1. *Main> mySigNum 0
  2. 0
  3. *Main> mySigNum 3
  4. 1
  5. *Main> mySigNum (-3)
  6. -1

复制代码

但 guards 也可以用于无参函数(也就是常量):

  1. f1 | 1 > 2 = False
  2.     | 1 < 2 = True
  3.     | otherwise = True
  4. -- 这样调用 f1 就可以得到 True

复制代码
这里的 f1 的类型为:
*Main> :t f1
f1 :: Bool
上面的函数相当于:

  1. f3 = if 1 > 2 then False else True

复制代码
也可以在这样的 guards 中应用变量:
例:

  1. x = 1
  2. y = 2
  3. f2 | x > y = -1
  4.    | x < y = 1
  5.    | otherwise = 0
  6. -- 这里调用 f2 就可以得到 1

复制代码
这里的 f2 的类型为:
*Main> :t f2
f2 :: Integer

[ 本帖最后由 izhier 于 2009-4-18 10:05 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

要走干脆点 2022-08-22 07:01:53

原帖由 izhier 于 2009-4-20 14:08 发表

想问一下,什么是 haskell kernel 呀?

就是一种简化过的 Haskell 撒,在 Haskell Report 中用来描述一些语法,例如 list comprehension, 例如 do,是被如何处理的,以及它们的语意是什么。在 GHC 中称为 Core.

爱你不解释 2022-08-22 07:00:14

我觉得也没有必要过分深究什么是语法糖什么不是,掌握它们的语法语义及相互之间的关系就可以了

想问一下,什么是 haskell kernel 呀?

旧竹 2022-08-22 06:59:59

原帖由 izhier 于 2009-4-19 15:09 发表
再问一下:

haskell kernel 是不是不含任何语法糖的 Haskell 代码 ?

你怎么定义语法糖?另外,我觉得也没有必要过分深究什么是语法糖什么不是,掌握它们的语法语义及相互之间的关系就可以了。

梦里的微风 2022-08-22 06:57:26

原帖由 izhier 于 2009-4-19 14:59 发表
看不太懂

Haskell 98 Report 是用 haskell kernel 描述的吗?

是用英语描述的。另外,再懂点 BNF 就可以了。

看来,看懂那个还需要一些时日呀!

有时间就抽空看一遍吧,也不难。

街道布景 2022-08-22 06:11:11

再问一下:

haskell kernel 是不是不含任何语法糖的 Haskell 代码 ?

丢了幸福的猪 2022-08-22 05:54:44

看不太懂

Haskell 98 Report 是用 haskell kernel 描述的吗?

看来,看懂那个还需要一些时日呀!

快乐很简单 2022-08-22 05:53:11

原帖由 izhier 于 2009-4-19 09:46 发表
问一下:

guards 属于表达式级别的吗?(就像 if..then..else)

guard 本身是 expression 的一部分,而不是独立的 expression, 看下 Haskell 98 Report 你就明白了。

独木成林 2022-08-22 00:37:38

问一下:

guards 属于表达式级别的吗?(就像 if..then..else)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文