免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: izhier
打印 上一主题 下一主题

Haskell 中的语法糖 [复制链接]

论坛徽章:
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
41 [报告]
发表于 2009-04-13 16:58 |只看该作者
原帖由 cjacker 于 2009-4-13 16:02 发表


关于是否可以优雅的实现,既然您能认识到语言特性决定一般n元组无法实现,怎么还会质疑是否优雅的问题。

怎么不能质疑?虽然一般 n 元组和 Haskell 98 的类型系统冲突,但这也不意味着没有办法了,例如可以适当的扩展这个类型系统,或者使用一些其他手段,例如动态的代码生成。再说了,就算一时想不到什么更好的解决方案,质疑一下总是可以的。

论坛徽章:
0
42 [报告]
发表于 2009-04-13 21:21 |只看该作者
原帖由 MMMIX 于 2009-4-13 16:58 发表

怎么不能质疑?虽然一般 n 元组和 Haskell 98 的类型系统冲突,但这也不意味着没有办法了,例如可以适当的扩展这个类型系统,或者使用一些其他手段,例如动态的代码生成。再说了,就算一时想不到什么更好的解 ...

主要想说的是,语言特性已经决定了一般n元组无法实现(无法穷举),那现有的实现也就无所谓优雅不优雅了,因为只能这么实现了,没有别的选择。

在实际使用的时候可以用Dynamic类型,其实关键还在于数据类型的确定性问题,如果一般n元组的元素数据类型无法确定,那么接受一般n元组的函数就要求出现多种类型的返回结果,这样的函数无法穷举定义,也不允许这么定义。
getElem n (..),最后返回什么呢?

那最终的实现还是回到了统一成一致数据类型的元组(暂且叫元组),其实就是列表了。

toDyn 1:toDyn "abc":toDyn 'c':[]
这个列表就是[Dynamic]类型,操作数据的时候仍然用列表函数就可以了,在最后使用数据时fromDyn就可以了,中间过程全部使用Dynamic类型。

这个过程有点像box和unbox。

论坛徽章:
0
43 [报告]
发表于 2009-04-13 22:23 |只看该作者

回复 #9 flw 的帖子

你才知道哦,去看一下源代码吧,揭示了一切,就是一个一个的,堆得像山高。。。不寒而栗

论坛徽章:
0
44 [报告]
发表于 2009-04-14 10:42 |只看该作者
原帖由 cjacker 于 2009-4-13 21:21 发表

主要想说的是,语言特性已经决定了一般n元组无法实现(无法穷举),那现有的实现也就无所谓优雅不优雅了,因为只能这么实现了,没有别的选择。

在实际使用的时候可以用Dynamic类型,其实关键还在于数据类型的 ...

我倒是同意MMMIX的说法,元组完全可以做的更好看。
我认为目前最根本的原因在于思想上,元组就没有作为一个数据类型出现。

论坛徽章:
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
45 [报告]
发表于 2009-04-14 11:21 |只看该作者
原帖由 ypyf3000 于 2009-4-13 22:23 发表
你才知道哦,去看一下源代码吧,揭示了一切,

这话没错,但前提是要能看懂源码,有些 Haskell 的代码是不那么好懂的。下面就是 ($) 的源码,

  1. infixr 0 $
  2. ($) :: (a->b) -> a -> b
  3. f $ x = f x
复制代码

这里有谁在第一次看到这个代码而且在没有看注释的情况下就完全理解了这段代码?反正我第一次是没有看明白。

论坛徽章:
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
46 [报告]
发表于 2009-04-14 11:23 |只看该作者
原帖由 cjacker 于 2009-4-13 21:21 发表

主要想说的是,语言特性已经决定了一般n元组无法实现(无法穷举),那现有的实现也就无所谓优雅不优雅了,

当然有是否优雅的问题了。判断出了时候优雅以后,才是它为什么优雅或者为什么不优雅。如果不优雅,要怎么做才能让它优雅。
因为只能这么实现了,没有别的选择。

总是有别的选择的。

论坛徽章:
0
47 [报告]
发表于 2009-04-14 13:46 |只看该作者
原帖由 MMMIX 于 2009-4-14 11:21 发表

这话没错,但前提是要能看懂源码,有些 Haskell 的代码是不那么好懂的。下面就是 ($) 的源码,

infixr 0 $
($) :: (a->b) -> a -> b
f $ x = f x

这里有谁在第一次看到这个代码而且在没有看注释的情况 ...

f $ x = f x
我觉得这是最容易懂得了……甚至比 f . x 还容易……

论坛徽章:
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
48 [报告]
发表于 2009-04-14 14:04 |只看该作者
原帖由 Magicloud 于 2009-4-14 13:46 发表

f $ x = f x
我觉得这是最容易懂得了……甚至比 f . x 还容易……

但是,你确定你完全理解它里面隐含的种种意思么?

论坛徽章:
0
49 [报告]
发表于 2009-04-14 16:21 |只看该作者
原帖由 MMMIX 于 2009-4-14 14:04 发表

但是,你确定你完全理解它里面隐含的种种意思么?

没什么可隐含的吧,如果我已经完全理解了f x,那f $ x就没有更多需要领会的内容了。

论坛徽章:
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
50 [报告]
发表于 2009-04-14 16:37 |只看该作者
原帖由 Magicloud 于 2009-4-14 16:21 发表

没什么可隐含的吧,如果我已经完全理解了f x,那f $ x就没有更多需要领会的内容了。

真敢说。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP