SpeedVan
2015-05-01 14:41
2015-05-01 11:13 "@luda"的内容
面向对象既关注空间又关注运动,面向对象这种方法有利于堆放出一个在空间结构上良好的东西,这样的东西有空间形状,对右脑友好,据说右脑是我们的本能脑,良好堆放的空间有利于我们使用更加高效的本能计算(左脑的计算太耗时间);函数是运动,是个过程,但是 ...

函数理解成过程,那绝对是错误的。

函数之所以会这样理解,是被以往语言所“毒害”的。函数一词在还没有计算机就存在了,是以往过程式语言,为了模仿数学函数所得出自己的函数。函数就是y=f(x),就是表达了x与y的关系,无需更多东西。

用指令式的函数来理解函数式,连边都沾不上。

luda
2015-05-01 15:21
2015-05-01 14:41 "@SpeedVan"的内容
函数就是y=f(x),就是表达了x与y的关系,无需更多东西。 ...

y=f(x)表达的是给定一个x通过f变换后会得到了y。这里的“变换”是个过程,因为变换必定经过时间,没有时间世界无法运行起来,如果运行不起来的话函数方法论就会只是用来帮助推理和思考的没有别的用处

SpeedVan
2015-05-01 21:49
2015-05-01 15:21 "@luda"的内容
y=f(x)表达的是给定一个x通过f变换后会得到了y。这里的“变换”是个过程,因为变换必定经过时间,没有时间世界无法运行起来,如果运行不起来的话函数方法论就会只是用来帮助推理和思考的没有别的用处 ...

我不说你偏题:

要让时间加入逻辑,也只能成为逻辑中一个概念而已。逻辑跟时间根本不在一个层次上。函数、逻辑都是谈关系,引入时间,也是从中增加时间关系而已。

若果你仍然关注f变换这里面的过程,你仍然不理解函数。对我而言,f是怎样一个关系足以,因为他就是一个命题,直接就是领域逻辑。反过来说,面向对象又哪里有时间了,面向对象为了加入时间概念,加入了更多与其无关的概念,事件概念在没有面向对象就存在了,对象表达里,有那一条与时间有关?面向对象本来就可以转化为蹩脚的函数,你能找出面向对象能表达,而函数或逻辑不能表达的东西?只怕你要做出一个理发师来了。

说你偏题:

我本来只论语言,也就是论逻辑表达能力,面向对象对领域逻辑的分解能力是有,但逻辑组合能力非常差,所以我们写那么多代码,引入各种各样的规范,最后BUG还是漫天飞。甚至回过头看,各种高质量代码方式和规范都有函数影子。

PS:曾经有人极端说过:语言只需要两个——C和Haskell(理解为这个语言还是这个系列的语言就随你了),面向对象只是函数(逻辑)上的一个特异。

luda
2015-05-01 23:27
2015-05-01 21:49 "@SpeedVan"的内容
引入时间,也是从中增加时间关系而已 ...

任何函数中都不应引入时间。时间 = 变化 = 运动,任何函数中都没有时间,但是函数表达的知识作用域世界时必定耗费时间。

没有任何函数中有时间概念。作为数学函数的s = vt中的t不是时间,作为物理定律的s = vt中的t才是时间。

luda
2015-05-01 23:48
y=f(x),输入相同的x它永远输出相同的y,这说明这个公式中没有时间,因为没有变化存在,没有变化就没有时间。可是这只是理想的数学模型,事物一旦真实运行起来时不可能不经过时间。时间是相对的,我们只能控制到让局部的时间停止无法阻止整个世界的时间箭头,虽然可以让相同内的某个函数对于同样的输入永远返回同样的输出,但是我们根本不可能给予它同样的输入,因为世界的时间箭头在向前,1小时前输入的1和1小时后输入的1只在数学上想等但在现实世界中不想等,因为一个是一小时前的一个是一小时后的。

SpeedVan
2015-05-02 09:46
2015-05-01 23:48 "@luda"的内容
y=f(x),输入相同的x它永远输出相同的y,这说明这个公式中没有时间,因为没有变化存在,没有变化就没有时间。可是这只是理想的数学模型,事物一旦真实运行起来时不可能不经过时间。时间是相对的,我们只能控制到让局部的时间停止无法阻止整个世界的时 ...

又是这样的问题,简单说一句:你想“多”了。一个领域的原子命题是那样就那样,而其证明根本不需额外标识来表示是同一个。反过来说,面向对象有考虑过1不是原来的1的问题么?“不能给予同样的输入”,是你把奇怪的证明硬套在某个命题上而已。你做1+1=2时,请问你考虑过1的时间?对象间的运动,有哪个不是以对象状态为根本?你会把某对象a状态到b状态的无效“中间值”,参与方法运算?

一个思考这是另一篇引发思考的文章,这不是什么深思的文章,而是很轻易引发对象观自我反思的文章。所谓的变化难道不是我们臆测的东西?

monada
2015-05-02 11:02
2015-05-01 23:27 "@luda"的内容
没有任何函数中有时间概念 ...

“函数”本身包含时间意思吧,初中数学从常量到变量,函数是研究变量,“变”是和时间有关,有人说:初等数学是研究常量,高等数学研究变量,高度数学中函数是基础吧

luda
2015-05-02 12:49
2015-05-02 11:02 "@monada"的内容
“函数”本身包含时间意思吧,初中数学从常量到变量,函数是研究变量,“变”是和时间有关,有人说:初等数学是研究常量,高等数学研究变量,高度数学中函数是基础吧 ...

问题是函数虽然研究的变,但是函数的信奉者不认为这种变会经过时间,如果不经过时间的话就没有变,没有变就只是一个理论上的数学公式。如果函数本身包含时间概念的话函数和“变化”和“时间”和“运动”和“过程”都是指的同一个事物。个人倾向于他们指的都是同一个事物,数学上的函数只在数学中存在在计算机世界中不存在。

luda
2015-05-02 12:55
数学上的函数没有时间概念,物理上的函数才有时间概念。函数中的时间可以消去,因为时间就是那个函数。y = f(x)中的f在物理化的时候可能就是时间了,但是这个数学式子中引入不了时间概念,因为数学上的变换是不经过任何时间的。那个f在数学上可能是个0,从而左边是0右边也是0,数学上的变换不经过时间等于没变。

SpeedVan
2015-05-02 13:38
2015-05-02 12:55 "@luda"的内容
数学上的函数没有时间概念,物理上的函数才有时间概念。函数中的时间可以消去,因为时间就是那个函数。y = f(x)中的f在物理化的时候可能就是时间了,但是这个数学式子中引入不了时间概念,因为数学上的变换是不经过任何时间的。那个f在数学上可能是 ...

你还是不明白,函数就是在表达关系,引入时间只是引入一种新的关系而已。物理上的函数一样在表达关系,他们本质上并没有任何差异,只是在物理界上有其领域范围(设定一系列原子命题)。若果关系是抽象的话,物理只是一个实例而已。s = vt这是表达S与V、T的关系而已,跟 a = bc关系一样,换个符号而已。另一个角度说,你说t表达时间,我说c表达n维空间,你信不?a代表n+1维,b就是一个转换过程。我连维度都管上了,时间还管不上?

PS:我们向上不断抽象就是关系、逻辑等东西了,再向上抽象已经成为不可言的东西了,也是我们该保持沉默的时候。若果你用物理能高于关系和逻辑的高度来阐述问题,我们凡人一定无法听懂。

luda
2015-05-02 14:55
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。任何一个等号左边的事物和右边的事物都是同一个事物,都是自己跟自己相等。无论一个函数等式子多么复杂,它的左边是自己,右边也是自己。

我听说函数式的热爱着不喜欢看到赋值,可是世界的意义不在于相等而在于不相等,不在于“=等号”而在于“=赋值号”。

《编程的宗派》

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

Haskell号称自己将数学带入了计算机,是他说谎吗?看来计算机被你们OO派已经带入歧途,连计算机的基础理论数学祖师爷回来都不认识了。

[该贴被monada于2015-05-02 15:43修改过]

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

数学上的函数不止在计算机中不存在,在整个宇宙中都不存在。它只可能在宇宙之外存在,但是宇宙之外没有任何存在。

结构和函数无法分割,时间和空间无法分割。单独的结构或空间不是半个世界,而是什么都不是,只有时间和空间结合时那个可以被我们想象、臆测、观察、感知、推测到的“体”才属于我们的世界。单独的空间或时间不属于我们的世界。

[该贴被luda于2015-05-02 15:54修改过]

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

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

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

luda
2015-05-13 11:42
引用“一种东西变换之后还是自己,但又不会完全是自己,因为需要能引入新的能力。同时它们串起来能处理所有问题,而问题本身又可以表达为自己,同时可以串起来被处理。

要实现这种变换,可以先从虚空中想像出一种context,不管里面怎么变,出来还是这个它。最简单的就是“有(Just)”和“无(Nothing)”,都归类为Maybe,然后是List之类的集合,再往上,包括运算本身比如Functor,Applicative等,最后终于到了IO。

实际上从函数运算的角度,不存在单纯的“值”,1应该是=>1,或者说,所谓的常量值也是函数,只是每次不管输入什么都输出同样的结果。这样世界就只有运算,值是没必要的,更没有状态。但这是神的视角,而一旦人开始思考时,由于不具备神的无限的能力,只能在每个瞬间试图去把握世界,就看到了值和状态以及状态呈现时的context/stage/舞台。但人希望能像神一样去理解世界,就只好从这每个瞬间呈现的一切中去寻找变与不变的东西,当他们历尽艰辛找到“不变”的“变换”时就迫不及待地将之命名为定律。

可是,找到的与时间t无关的定律如此之少,所以不妨稍微松弛些,把尽量少部分的context和时间t也包含进来,就能把握更多的规律。实际上,从人的角度和视野,也确实能构造出一系列严谨的逻辑体系,只是它们永远不可能是完备的,从而需要不同的逻辑体系来补充对世界的认知。

我一再谈到t,t实际上就是程序中的所谓指令式代码,它们是顺序相关的,由时钟驱动一步一步执行的部分。时钟和顺序在这里是如此重要,以致一旦有并行的行为,就不得不考虑各种笨拙的同步手段。所以,只有消除了t的部分,才真是是属于神的东西,无所谓开始、无所谓终结。”

拷贝自邓草原的微博

猜你喜欢
2Go