免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3404 | 回复: 6
打印 上一主题 下一主题

"programming in haskell"第5章的习题5 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-08 17:51 |只看该作者 |倒序浏览
Show how the single comprehension [(x , y) | x ← [1, 2, 3], y ← [4, 5, 6]] with two generators can be re-expressed using two comprehensions
with single generators. Hint: make use of the library function concat
and nest one comprehension within the other

这个做法对吗? 我总有点不是很理解
concat [ [ (x,y) | y <- [4,5,6] ] | x <- [1,2,3] ]

论坛徽章:
0
2 [报告]
发表于 2008-10-08 18:06 |只看该作者
对的。

哪里不理解?

[ [(x,y) | ...] | x<-[1,2,3] ]

生成一个列表,此列表的元素类型为列表,所以最后用个 concat 接起来。

论坛徽章:
0
3 [报告]
发表于 2008-10-08 18:25 |只看该作者
如果用 scheme 来写,除去 concat 的部分,将会是


  1. (define (make-lists X Y)
  2.   (map (lambda (x) (map (lambda (y) (list x y)) Y)) X))
复制代码


  1. > (make-lists '(1 2 3) '(4 5 6))
  2. (((1 4) (1 5) (1 6)) ((2 4) (2 5) (2 6)) ((3 4) (3 5) (3 6)))
复制代码


对比着看一下,应该容易理解了吧。

SICP 中介绍了一个 flatmap,如果把第一个 map 换成 flatmap,可以得到 concat 后的结果。

论坛徽章:
0
4 [报告]
发表于 2008-10-08 18:31 |只看该作者
原帖由 win_hate 于 2008-10-8 18:06 发表
对的。

哪里不理解?

[ [(x,y) | ...] | x

我老以为single generators是指的只能出现一个变量x而不能出现2个如x,y
所以想了半天才弄出来,还不敢肯定是否正确

论坛徽章:
0
5 [报告]
发表于 2008-10-08 18:58 |只看该作者
二元函数都可以被 curring 成一元来处理。

虽然不太确定,但 Haskell 可能正是以你给出的方式来实现 [(x,y) | x<-..., y<- ...] 的。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2008-10-08 19:22 |只看该作者
原帖由 win_hate 于 2008-10-8 18:58 发表

虽然不太确定,但 Haskell 可能正是以你给出的方式来实现 [(x,y) | x<-..., y<- ...] 的。

没错,不过 generator 求值的顺序有差别。

见 Haskell 98 Report 3.11  List Comprehensions  http://www.haskell.org/onlinereport/exps.html

[ 本帖最后由 MMMIX 于 2008-10-8 19:29 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2008-10-08 19:25 |只看该作者
原帖由 caijimin 于 2008-10-8 18:31 发表

我老以为single generators是指的只能出现一个变量x而不能出现2个如x,y

| 后面那些叫做 generator
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP