免费注册 查看新帖 |

Chinaunix

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

大家认为是否需要在国内的程序员中推广一下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
51 [报告]
发表于 2009-03-25 11:59 |只看该作者
原帖由 flw 于 2009-3-25 09:34 发表

你不如说说啥叫【list 的“控制结构”角色】?

估计他/她说的是 map + list 之类的应用。

论坛徽章:
0
52 [报告]
发表于 2009-03-25 14:01 |只看该作者
不单单是这个。在函数式语言中没有“循环”结构,所以想要完成迭代的话一般用递归。List是一个很重要的递归的载体。在执行迭代时,List也常常在函数定义中作为队列或者栈来使用,以控制算法的执行流程。比如RWH中遍历目录树的例子。

另一个愿意就是MMMIX说的,讲List的时候应该讲map,fold这两个基本操作。这两个操作对于List而言,就好象乘法除法对于整数一样,可以认为是非常基本和常用的操作了。而这两个操作本身也包含着控制结构。

flw说即使不讲IO,也可以使用print,的确是这样。在IO之前使用print的时候,只说这个动作在干什么以及它
和“函数”的不同。而且,在IO之前,大概也只会用到这个函数(最多再加一个输入动作)。这两个函数只占IO部分很少的篇幅。但是,在讲List的时候用到的List上面函数的概念时,至少需要说一下这几个方面:Patten Matching(匹配[]和(x:xs));[函数分情况定义 | Case表达式](至少有两种Pattern,所以这两个至少需要一个);递归函数(处理List基本靠递归);高阶函数(map,fold需要)这些东西。在讲高阶函数时,又不得不提函数类型吧,在加上函数定义本身,已经把函数那章的大部分内容提到了。

原帖由 MMMIX 于 2009-3-25 11:59 发表

估计他/她说的是 map + list 之类的应用。

[ 本帖最后由 freearth 于 2009-3-25 14:07 编辑 ]

论坛徽章:
0
53 [报告]
发表于 2009-03-25 14:15 |只看该作者
如果一定要类比一下的话,List很像C或者C++里面的数组类型。它虽然是函数式语言的很核心的数据结构之一,但却不那么“基本”。至少在C、C++的教材中,数组一般是放到函数(这个函数和Haskell的函数有区别)之后讲的。

原帖由 izhier 于 2009-3-24 23:25 发表


不是太清楚 List 和函数的关系
只是觉得:
将 haskell 语言中的基本类型放在前面讲
可以使我们这些新手有一个全局的把握
好多书都是先讲基本类型,然后是函数,类,异常

论坛徽章:
0
54 [报告]
发表于 2009-03-25 14:20 |只看该作者
我也想避开GHCi解释器的let,避免开始的混淆。所以,打算所有的例子都编译执行,而不用解释器。

不过我仍然觉得IO可以放后面一些。毕竟在例子中用到的IO也就是一个输入,一个输出,稍微说一下这两个动作的含义,说一下它们和函数是不同的就行了,不用深入介绍这两个动作。所有的例子都用同一个IO框架。

原帖由 flw 于 2009-3-25 09:30 发表

GHCi 的话,就又得先讲 let,
没学过 FP 的人,很容易会把 let 理解成赋值,比如 GW-BASIC 里赋值就用 let

我个人希望 let 和 where 出现的晚一点,到讲程序结构、模块划分的时候再讲。

论坛徽章:
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
55 [报告]
发表于 2009-03-25 14:27 |只看该作者
原帖由 flw 于 2009-3-25 09:30 发表

GHCi 的话,就又得先讲 let,
没学过 FP 的人,很容易会把 let 理解成赋值,

那就着重强调下 let 不是赋值呗。

论坛徽章:
0
56 [报告]
发表于 2009-03-25 14:29 |只看该作者
这本书挺好的。应该算是最为经典的一本Haskell教程了吧?顺便向大家推荐一下。中文的我没有看过,不过在英文版里面,它的Monad讲的比较简略,最好再去找一篇专门介绍Monad的文章辅助阅读。

原帖由 我@一条柴 于 2009-3-25 10:51 发表


Haskell中文教程  見附件

论坛徽章:
0
57 [报告]
发表于 2009-03-25 14:42 |只看该作者
原帖由 flw 于 2009-3-23 22:46 发表
有人催,有人审,就差干活的了!

我有瓶醋,今晚想吃饺子,谁借我点儿面皮和肉馅儿?


嗯,有这水平,一般都是企业家了

论坛徽章:
0
58 [报告]
发表于 2009-03-25 14:47 |只看该作者
原帖由 win_hate 于 2009-3-23 14:28 发表


我对 Haskell 特有好感,这个语言很漂亮,

不过对"没点水平玩不来"持保留意见,水平可以在学习中提高。

我觉得把 haskell 作为第一门学习的语言也是合适的。

没有一定的数学基础,可能会落得每行代码都要手工推导一下才能知道结果的境地(特别是monad),那么对于被推广人来说,他不如选择c#或ruby之类的……

论坛徽章:
0
59 [报告]
发表于 2009-03-25 15:04 |只看该作者
呵呵,只要你不是打算研究函数式语言的发展或是研究类型系统、程序分析、形式语义等,只是打算用Haskell作为一门完成任务的语言,那么,你需要的数学基础大概就是初高中的代数和函数了。

函数式语言没有那么难的,它们只是比较陌生而已。

原帖由 Magicloud 于 2009-3-25 14:47 发表

没有一定的数学基础,可能会落得每行代码都要手工推导一下才能知道结果的境地(特别是monad),那么对于被推广人来说,他不如选择c#或ruby之类的……

论坛徽章:
0
60 [报告]
发表于 2009-03-25 15:07 |只看该作者
开始的时候介绍下它在什么项目中有很大优势或者成功的案例(商业项目)会更吸引人学
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP