FP与IP作为两种编程范型的解决问题思路及其适用领域分析

FP的解构模型是计算。它的原则是,一切都可以转化成某种计算。But, is it realy so?

IP的模型则是状态演变。计算是一种从外部入眼的观察者方案,而状态演变则是一种内部(模拟,或者说仿真)方案。计算方案的有效性(或者说有价值性)依据是关系(或者说逻辑,知识),状态演变方案的有效性依据则是过程。软件理论通常把面向过程与面向对象分开讨论,其实从状态演变这一角度看来,两者并没有真正的区别。因为它们的有效性依据是一样的。

它们都依赖于过程。从得到结果的可靠性上来说,计算式方案即FP方案显然更容易卷入前人经验知识的错误。特别是在涉及科学计算时。而从状态演变式方案得到的结果的可靠性,则只依赖于两样东西:一是模型的逼真度;二是形式系统本身的问题(其实如果继续深究的话还会涉及至於认识论意义上的问题)。这意味着,计算式方案不可能用来探索。

哲学上将命题分为两种:分析命题与综合命题。逻辑经验主义认为分析命题不可能包含或者表达任何新的知识。那么对“新的知识”的定义就至关紧要了。比如柏拉图认为知识是先验的。如果抛开他对知识的具体定义,那么可以认为他认为知识是早就摆在那里,等着我们去发现的。但是能只通过思考发现的东西显然不是太多,至少不是所有,因此他的这个观点肯定是有问题的。即使这样,这里还是可以借用一下他的思想来说明逻辑经验主义者的观点:分析命题之所以不包含新知识的原因是,这些东西早就摆在那里了。既然它们早就摆在那里了,那么它们还是“新”知识吗?

我认为不是。

比如,1256356349*3834543984的结果肯定不是一眼就能看出来的,但它不是知识。因为它的结果“一直都摆在那里”。

而这样的东西,却正是FP正在被用来完成的许多工作之一。

它只能完成已知的东西。也就是说,它只能作为一种形式化工具被使用。却不能被用来探索新的知识。或者更甚之,用来处理与知识无关的东西。我想,这也许就是为什么FP在历史上一直都只在学术圈中流行,而IP却盛行于真实“世界”的原因:真实“世界”与学术圈的最大不同是,真实世界充满了没有解决的问题以及不是“问题”的“问题”(比如,在线服务?---在类似情况下,应用系统并不为真正的“问题”存在,而只是作为一种机器存在------此时的程序与学术问题没有任何关系---它只是作为一种事务型系统而存在。关于这一点的另一个例子是网络报时系统------为什么我要把时间设计成函数而不是变量?),而学术圈充满了已经解决的问题(以及解决这些问题的方法)。

你可能感兴趣的:(函数式编程,FP)