2015-05-02 13:38 "@SpeedVan"的内容
函数就是在表达关系 ...

y = f(x);
z*z = x*x + y*y;
这表达的是什么关系呢?这其实什么关系都没表达。上面两个等式跟下面这些等式是一样的
1 = 1;
2 = 2;
a = a;
0 = a -a + a - a;
这其实什么都没表达,数学之所以可以声称自己绝对正确就是因为它什么都没表达。1 = 1中左边的1跟右边的1是同一个1。任何一个等号左边的事物和右边的事物都是同一个事物,都是自己跟自己相等。无论一个函数等式子多么复杂,它的左边是自己,右边也是自己。
我听说函数式的热爱着不喜欢看到赋值,可是世界的意义不在于相等而在于不相等,不在于“=等号”而在于“=赋值号”。
《编程的宗派》

2015-05-02 12:49 "@luda"的内容
数学上的函数只在数学中存在在计算机世界中不存在 ...

Haskell号称自己将数学带入了计算机,是他说谎吗?看来计算机被你们OO派已经带入歧途,连计算机的基础理论数学祖师爷回来都不认识了。
[该贴被monada于2015-05-02 15:43修改过]

2015-05-02 15:38 "@monada"的内容
Haskell号称自己将数学带入了计算机,是他说谎吗?看来计算机被你们OO派已经带入歧途,连计算机的基础理论数学祖师爷回来都不认识了。 ...

数学上的函数不止在计算机中不存在,在整个宇宙中都不存在。它只可能在宇宙之外存在,但是宇宙之外没有任何存在。
结构和函数无法分割,时间和空间无法分割。单独的结构或空间不是半个世界,而是什么都不是,只有时间和空间结合时那个可以被我们想象、臆测、观察、感知、推测到的“体”才属于我们的世界。单独的空间或时间不属于我们的世界。
[该贴被luda于2015-05-02 15:54修改过]

看到您推荐的《编程的宗派》,我晕,虚无主义,你们都不好,只有我的意淫yin语言才好。副作用不但是函数编程语言避免,也是OO避免,OO中用对象框住一批行为,也就是避免它们产生副作用,OO的设计模式以及SOLID原则,都是为避免副作用的措施,可以说处理副作用是为自己做的事情察屁股,对不起,话糙理不糙。数学与逻辑以及函数语言提供了比模式更加切实的与功能合二为一的经得起推敲的编程风格。

函数也能表达变化的空间,比如初中数学中追赶问题,A从甲地出发,半个小时后B从乙地出发,。。。他们何时相遇?这些问题都包含变化空间和时间。

函数能包涵结构与时间,函数是你说“体”。而且除了函数,大概没有公认的模式能表达这个“体”的概念,数学的函数也是类似设计模式的一种公认工具和模式。

引用“一种东西变换之后还是自己,但又不会完全是自己,因为需要能引入新的能力。同时它们串起来能处理所有问题,而问题本身又可以表达为自己,同时可以串起来被处理。
要实现这种变换,可以先从虚空中想像出一种context,不管里面怎么变,出来还是这个它。最简单的就是“有(Just)”和“无(Nothing)”,都归类为Maybe,然后是List之类的集合,再往上,包括运算本身比如Functor,Applicative等,最后终于到了IO。
实际上从函数运算的角度,不存在单纯的“值”,1应该是=>1,或者说,所谓的常量值也是函数,只是每次不管输入什么都输出同样的结果。这样世界就只有运算,值是没必要的,更没有状态。但这是神的视角,而一旦人开始思考时,由于不具备神的无限的能力,只能在每个瞬间试图去把握世界,就看到了值和状态以及状态呈现时的context/stage/舞台。但人希望能像神一样去理解世界,就只好从这每个瞬间呈现的一切中去寻找变与不变的东西,当他们历尽艰辛找到“不变”的“变换”时就迫不及待地将之命名为定律。
可是,找到的与时间t无关的定律如此之少,所以不妨稍微松弛些,把尽量少部分的context和时间t也包含进来,就能把握更多的规律。实际上,从人的角度和视野,也确实能构造出一系列严谨的逻辑体系,只是它们永远不可能是完备的,从而需要不同的逻辑体系来补充对世界的认知。
我一再谈到t,t实际上就是程序中的所谓指令式代码,它们是顺序相关的,由时钟驱动一步一步执行的部分。时钟和顺序在这里是如此重要,以致一旦有并行的行为,就不得不考虑各种笨拙的同步手段。所以,只有消除了t的部分,才真是是属于神的东西,无所谓开始、无所谓终结。”
拷贝自邓草原的微博