怎么才叫 lazy 呢?

发布于 2022-08-13 13:49:55 字数 159 浏览 11 评论 9

如果哪里不正确,请指出,改之


需要时才计算,不需要时就不计算
才叫 lazy!

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

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

发布评论

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

评论(9

阳光①夏 2022-08-21 23:00:19

原帖由 win_hate 于 2009-3-31 21:59 发表

g=g

f b x y = if b then x else y

执行 g 会陷入无限循环。

f True 1 g 得到 1。

f False 1 g 无限循环。

这段代码好面熟啊。

贱贱哒 2022-08-21 23:00:19

原帖由 flw 于 2009-3-31 22:01 发表

这段代码好面熟啊。

我以前没贴过啊?

紫轩蝶泪 2022-08-21 22:59:56

改回来了,发现你回贴了,晚了一步呀

[ 本帖最后由 izhier 于 2009-3-31 22:05 编辑 ]

抱着落日 2022-08-21 21:45:06

哦?
我换成 2 `div` 0 之后确实是可以的。
难道 Haskell 居然是 normal order 的?

眼波传意 2022-08-21 17:36:35
  1. g=g
  2. f b x y = if b then x else y

复制代码

执行 g 会陷入无限循环。

f True 1 g 得到 1。

f False 1 g 无限循环。

凉城已无爱 2022-08-21 12:46:55

原帖由 izhier 于 2009-3-31 21:51 发表

Main> myIf False (2/0) 1
ERROR - Cannot infer instance
*** Instance   : Fractional Int
*** Expression : myIf False (2 / 0) 1

这个提示是 Cannot infer,说明类型不匹配
我想问一下: 0 是 Frac ...

类型不匹配是因为2/0类型为(Fractional t) => t,而你的myIf的类型声明中,该参数为Int。

你把2/0换为div 2 0就好了。

当爱已成负担 2022-08-19 12:33:41

flw理解完全错误。你可以用myIf (1==2) undefined (2+3)来检验。

各空 2022-08-16 08:37:08
  1. Main> myIf False (2/0) 1
  2. ERROR - Cannot infer instance
  3. *** Instance   : Fractional Int
  4. *** Expression : myIf False (2 / 0) 1

复制代码
这个提示是 Cannot infer,说明类型不匹配,根本没有通过类型推导系统
(2/0) 不是 Int 类型

  1. real world haskell 第二章 Understanding Evaluation by Example 中有讲

复制代码
[ 本帖最后由 izhier 于 2009-3-31 21:59 编辑 ]

橘味果▽酱 2022-08-16 00:11:27

解释完全错误!

你这个是 normal order 和 application order 的区别,和是不是 lazy 没太大关系。
很遗憾,Haskell 是 application order 的,也就是说,

你会认为:解释器先把 ("fst" == "Fst") 和 (2+3) 分别计算为 False 和 5,然后把 False、1 和 5 绑定到 myIf 函数的三个参数 cond、a 和 b上,因为 cond 为 False,所以返回 5.

这样子的。

你认识的正好是错误的。

你可以用 myIf (1==2) (2/0) (2+3) 来检验。

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