只显示主题贴

一点都没有错!我已经承认了你所提出的问题都是 Erlang 在设计上不成熟的表现,T1 大人也绝对没有针对你一个人的意思,只是说这种不成熟很正常,看看其它的语言就知道什么叫五十步笑百步! 省省吧,谁爱用什么语言谁用去,只要不以自己一人之力来引诱菜鸟来用就行。 C++ 是死是活烦不了,哪个语言都有看了让人吐血的代码,对于不懂XX语言的人来说就是一堆字符。但是很明显,以 Erlang 为首的 FP 语言写的东西还是能看得懂怎么回事的。你看着嫌烦,有人不嫌;有人看编译器嫌烦,你不嫌。就是怎么回事。
(教育用,大腕版,纯搞笑) 一定要爱上括号 Scheme 一个都不能省的那种 Vim、Emacs 都能自动高亮括号对 看一眼就知道表达式是在哪个参数位置上返回的 心里别提多舒坦 没那个我现在都不知道怎么写程序! 用 Python 的时候 括号逗号元组连一块儿 三四层的函数调用就看不出来哪儿对哪儿了 Perl 光括号就七八种,还能自定义 鬼能背得得那匹配规则 Ruby 倒好 只省括号,但要被算符优先级 不是没事儿找事儿嘛 你看人家 Haskell 都学 Scheme 的括号规则 想用 $ 省几个? 你不先把括号打全了怎么省? 于是你用 Lisp,想省俩开始、结尾那括号 你都不好意思跟人打招呼 ...
握手握手~` Vim 有下拉屏幕的快捷键,Emacs 应该也有。 FP 在实际应用方面,真的很多。计算机科学方面的那些就不提了,说点“亲切的”。知道 .Net 的垃圾收集器是怎么来的吗?先用 Lisp 写了再转成 C++ 得来的。当然,FP 语言自身的性能也是越来越变态(尤以 Haskell 为甚)。像很多人所热衷的类似服务器、数据库、操作系统等“大型软件”,有很多 FP 写的此类应用。 你说的 Erlang 在语法设计还有一些细节方面的问题,其实我也在暗自偷着乐。这也是我不打算宣传 Erlang 的原因。不过作为世界上极少数支持 PI 演算的语言之一,如果处于并发性能考虑,需要用 Erla ...
是啊是啊,还有些语言只要制造商对外宣传“这是一门搞笑的开发语言”它马上就变成开发语言了。
要是按这个思路来理解“要不要加 do”,那你要理解的东西就可能太多了。确实需要补充一些 Lambda 演算和状态方面的知识。
问题就在这儿。在普通语言中,这样写看起来是没问题的,但一遇到并发就全是问题了。(想想看也容易理解:如果只需要这样的话,那还要 Monad 的原子延续做什么呢?)最关键的不是执行的顺序,而是执行的态度。有了延续这样的能够安全访问执行栈上任意一点的技术,才能安全地在 do 中的 IO 语句中进行并发。Haskell 不是为了没事找事儿采用这样“奇怪”的 IO 方式(也是一种程序组织方式)。
个人认为,差不多了。关于 bind 方法上的理解还有一些问题,但说起来很麻烦,就等 Trustno1 大人来仲裁吧。他的这个帖子:回albertLee:关于Category Theory 和Monad中说的比较详细,但还不够浅显。AlbertLee 的一些翻译结果可以去网上搜一下,如果里你很关心 Monad 的话。
有一点偏差。do notation 是 Monad 传递“世界变量”进行延续调用的一个简化语法,展开后应该是一个以 >> 算符连接、以 >>= 算符结尾的一个 Monad 调用序列,并非你想的那样。这样做的意义不在于对齐函数调用的顺序,而在于使所有的 IO 都使用一个“世界”,然后把函数调用做成一个类似 reduce 下降的执行链,避免 IO 的副作用污染到程序的其它部分。 PS: 啊,那个“申请”过程是 JavaEye 的一个小 Bug,关闭了申请之后这提示还会出现。申请了就已经是成员了。
引用Haskell是Lazy语言,替换表达式的时候,可能会忽略掉“不可到达的计算”里面的表达式. Exactly Right. 引用这是不是说明, 程序执行的顺序, 有可能和代码书写顺序不一致呢? 这个并不完全是。代码书写的顺序是从左到右,但有些编程语言就是规定了参数代入顺序是从右到左。对于惰性语言,优势在于这只是一个实现问题,无关程序执行效果。当然,还有一些执行优化上的优势。例如可以放手进行循环不变量外提优化而不需考虑对逻辑结构的影响。 PS: 这是在谦虚还是在婉拒呢...你应该能感觉到,你的水平已经远超圈子里80%的人了,我是组长我怎么不知道。。。
引用透明性,《为什么函数式编程至关重要?》一文中是这样描述的: 引用因为没有副作用能够改变表达式的值,因此可以在任何时刻对它求值。这一特性将程序员从规定控制流的重担之下拯救出来。由于表达式可以在任何时刻被求值,程序员便可以随心所欲地使用自己要的值来代替变量,反之亦然——也就是说,程序是“引用透明”的。这一自由使得函数式程序与它们传统的对应物相比,更容易数学化地控制。 事实上它是等式推理的一部分:支持 α-替换 全部并支持 β-替换的一个子集。α-替换表现为在词法作用域范围内,对任意一个变量的所有次出现进行全体换名,程序执行效果完全不变。β-替换表现为将表达式作为函数参数代入,等效于对函数体中 ...
lichray
搜索本博客
博客分类
最近加入圈子
最新评论