免费注册 查看新帖 |

Chinaunix

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

大家认为是否需要在国内的程序员中推广一下Haskell? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-03-24 20:58 |显示全部楼层
我觉得你说的将应用性的东西和语言基础部分分开很对。

前面那个目录版本算是0.1版。现在,我的想法是把“代数数据类型”放到第五章的地方。
可是“Monad”、“并行与并发处理”、“异常处理”和“输入输出”这几部分,比较难以划分那些是语言基础,那些是应用。比如Monad,其实,除了“do”语法糖以外,其它的部分都可以用已有的语法定义出来,但是Monad的概念却非常重要。关于这个,有什么具体的建议吗?

另外我还有一个犹豫的地方:IO和Monad先讲谁?我看过的所有资料都会在没有Monad概念的时候先讲IO,等到后面讲完Monad后,再回顾一下IO。所以0.1版中就仿照做了。但是,我一直在想,是否可以把IO拖到Monad之后讲?在这之前,一直用一些简单的IO,并告诉读者不用担心IO,目前只要知道语义就好,直到讲过Monad之后,再用Monad的概念讲IO。大家对这个问题有什么建议?

原帖由 MMMIX 于 2009-3-24 16:34 发表

在 Haskell 中, list 的概念和 function 关联很紧密,把 list 的介绍放在函数的介绍之后我觉得还是妥当的。但是,从第五章开始,我觉得顺序就有些不妥了,一些应用性的东西和语言基本概念性的东西被混在了一 ...

论坛徽章:
0
12 [报告]
发表于 2009-03-24 21:02 |显示全部楼层
这个方法的确不错,我也支持

另外,我觉得以后讨论问题,针对每一个问题单开一个帖子,这样的话追踪对同一个问题的讨论会方便些。对于讨论问题的方式,大家有什么建议吗?

原帖由 izhier 于 2009-3-24 17:16 发表

一章来一个帖子
一节再站一楼

while 1:
   if 新手看不懂:
       跟贴问疑
       楼主改之

是否可行

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

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


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

论坛徽章:
0
15 [报告]
发表于 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 出现的晚一点,到讲程序结构、模块划分的时候再讲。

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

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


Haskell中文教程  見附件

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

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

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

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

论坛徽章:
0
18 [报告]
发表于 2009-03-25 17:10 |显示全部楼层
这个我以前不知道,今天又长见识了,晚上去查查

原帖由 flw 于 2009-3-25 15:46 发表

Perl 的下一代版本 Perl6 从上个世纪就开始嚷嚷,
直到现在还没有完全做出来,这除了开源社区组织松散效率低下等因素外,
还有一个重要的因素就是:Perl6 计划庞大难以实现。
事实上 Perl6 的语法非常丰富 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP