快速业务通道

冒号课堂§2.2:声明范式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
Description Language)等等都是声明式的。算上它们,声明式语言所占的比例也是非常可观的。此前之所以没有提及,一方面,不少声明式语言采用的范式并没有专门的名称;另一方面,这些语言大多是领域特定语言,并且不少并非图灵完备的,有的连运算都没有。毕竟,目前我们的重点还是放在通用编程语言上。”

问号突然想到了什么,指着投影问:“这里用Lisp实现阶乘的方法不也可以用在C上吗?”

冒号点点头,写下一段代码——

int factorial(int n) { return n == 0 ? 1 : n * factorial(n - 1); }

“这是C的递归实现。”冒号娓娓道来,“除了细微的语法差别外,二者的确很相似,这说明用命令式语言也可以讲出声明式的味道。实际上,命令式语言提倡迭代而不鼓励递归,早期的Fortran 甚至都不支持递归。一则迭代比递归更符合命令式的思维模式,因为前者贴近机器语言而后者贴近数学语言;二则除尾递归(tail recursion)[4]外,一般递归比迭代的开销(overhead)大。相反,声明式语言提倡递归而不支持迭代[5]。就语法而言,它不允许迭代中的循环变量;就视角而言,迭代着眼微观过程而递归着眼宏观规律。”

叹号轻叹:“原来貌似普通的迭代和递归有那么多道道!”

“任何语言都难脱命令式或声明式的窠臼。事实上,凡是非命令式的编程都可归为声明式编程。因此,命令式、函数式和逻辑式是最核心的三种范式。为清楚起见,我们用一幅图来表示它们之间的关系。”说罢,冒号换了一个幻灯片——

冒号课堂§2.2:声明范式 - 编程入门网

冒号课堂§2.2:声明范式(4)

时间:2011-06-25 BlogJava xyz98

末了,冒号归纳道:“归根结底,编程是寻求一种机制,将指定的输入转化为指定的输出。三种范式对此提供了截然不同的解决方案:命令式把程序看作一个自动机,输入是初始状态,输出是最终状态,编程就是设计一系列指令,通过自动机执行以完成状态转变;函数式把程序看作一个数学函数,输入是自变量,输出是因变量,编程就是设计一系列函数,通过表达式变换以完成计算;逻辑式把程序看作一个逻辑证明,输入是题设,输出是结论,编程就是设计一系列命题,通过逻辑推理以完成证明。绘成表格如下——”

范式 程序 输入 输出 程序设计 程序运行
命令式 自动机 初始状态 最终状态 设计指令 命令执行
函数式 数学函数 自变量 因变量 设计函数 表达式变换
逻辑式 逻辑证明 题设 结论 设计命题 逻辑推理

冒号见众人微显难色,宽慰道:“这部分理论性稍微强了些,对函数式和逻辑式也仅作了描述性说明,并未深入。不解之处,大可不必介怀,撒下的种子总有一天会萌动。先休息片刻,不要走开,广告之后更精彩。”

,插语

[1]Prograph即Programming in Graphics,是一种可视化的、对象导向(OO)的数据流语言,它用图表(diagram)来取代文本编码。

[2] SISAL即Streams and Iteration in a Single Assignment Language,是一种函数式数据流语言,擅长并行科学计算。

[3] 约束式编程通过数据之间的约束关系来进行运算。它可以借助逻辑推理机制或其他数学和算法技巧来实现。有一种观点认为:用函数式、逻辑式或约束式三者之一的语言来编写程序,即是声明式编程。这种以编程

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号