查看文章
 
Programming Erlang读书笔记(一)
2008年10月12日 星期日 2:07

即将迎来Erlang的大作业了,他们都叫project不过我总不习惯叫project就当叫作业好了。

第一次看此书,快一年以前了,刚学完functional programming的课,John又给上了两节课,尽管只两节,重点难点部分讲的异常清晰,也在那之后可以顺利的看第一遍。

第二次看此书,半年前了,应付了考试,又有兴趣,重新看看,跟着做做也算好事,温故而知新嘛。

现在,算第三次了吧,谁让要开始做作业了呢,也快毕设了,也当作再熟悉一遍,毕竟好久没弄了,再加上之前忽略的,现在看来有些已经到了比较重要的程度,就顺便记录一下,至于其它的很多基本概念,比如atom,module,function或者pattern matching已经很熟悉了,很像C/C++中的,if,while这种概念在心理的感觉,也就忽略不记于此。

第三章:

先是sequential programming的部分,强调了一点pattern matching有意不对各种情况,尤其是异常情况有所考虑,出错就出错,这个当时没太注意,写的时候经常还自作聪明的写全点,其实没必要,John谈到过,Erlang编码规范中也提到过,只不过当时都没注意罢了。

可以对module的属性加入-compile(export_all)(原来写错了)这个比较好用,以前看过,后来想不起来在哪里了,大概调试的时候开发的时候,有些内部函数,可以在调试的时候加上此句,最后弄好了之后,去掉这里就可以了,标准的对外接口函数,写在单独的-export中,这样很方便,马上就会用到了。

同名而不同参数个数的函数不算一个函数,,所以joe的代码经常是,一个对外的,交给同名的,多俩参数的辅助函数,我大概都忘记了或者根本看第一遍就忽略了,每次都是fun交给fun2交给fun3多有不便,看着也不舒服,再回味joe书和example可以感受一下了。

high order function大概都快忘了还有这么个东西了,不过joe也说自己写100个也不见得用1,2个,不过总归是有这么个东西,list comprehension也似乎很久没想过用了,都干吗了?也没准用到的时候会想起来吧,估计快能用到了,也算提醒自己一下,另外就是当时看着很“恐怖”的P45那个函数,现在看着又觉得亲切了,总体来说跟Haskell中很相似,不过就是Erlang的定义函数,看起来稍微别扭一点,习惯了就好了。

Joe是如何写程序的,这个应该比较重要,只不过当时只是在做一些小的简单的,习惯用法,学习api的函数用法上为主,最后假装糊弄自己写个web server也并不复杂,所以也没太留意,前几天做Linda的模拟,自然发给了一个test文件,才忽然想起了测试驱动开发这么个概念,不过跟Joe比较相似的是,倒没完全测试带着开发走,而是开发一点测试一点,这样似乎倒比较符合我的思路,也比较觉得正常。Joe是先写一小块,然后shell中去测试一下,反复几次方便,然后后边关键一步是,shell中解决了之后,赶快落实成一个makefile,下次这种测试就能够重复了,由此看来,这才是比较核心的一条。首先,我原来只是shell中测测就完了,此法当时可行,但不能保证过后的测试可重复,不过好在当时还处于初学阶段,总把错误的代码和运行记录都单独粘贴出来,也算有了一种可重复的概念,前几天打出来看看,似乎那会儿的错误多集中在基本的语法上,毕竟新学一门语言,看着怪异的符号,变化的有些不太适应,不过现在看着亲切多了。然后呢,就是也不能就像Linda作业那样,上来或者边弄就直接弄出来一个test文件,虽然看起来效率很高,但终究是效果不一定好,而且一下子写test文件,也很难写的全面,不如shell能够快速的反馈快速的更新,所以,按照Joe这个方法大约是能平衡二者之后比较顺利的全面的一个方法,照方抓药,即可。

Guards还有后边判断函数,当时没注意,最不可司仪的就是,写在程序中都没问题,写在guard里边就错了,就好比前几天Linda的作业,每次第一遍运行错误,后边就都正确,这会儿千万不要怀疑计算机出了问题,如果错了一定是我错了,至于为什么没觉得错,只是不知道怎么错而已,想发知道哪错了,也大概就解决了问题。

record在后边肯定会用到,配置文件,读取完了之后,想必应该直接丢到一个record中就可以了,必然会再回来看的,还好第三章所剩不多了,基本看全活了。


类别:非常业余erlang研究||添加到搜藏 |分享到i贴吧|浏览(183)|评论 (0)
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu