冒号课堂§4.2:逻辑范式 - 编程入门网
/* a与ds的关系是什么? */
输出结果:R=father_in_law
输入查询:great_grandparent (pa,X) /* pa是谁的曾祖?*/
输出结果:X=e;X=f;X=g; X=h; X=i; X=j;
冒号课堂§4.2:逻辑范式(5)时间:2011-06-27 BlogJava xyz98引号义务作翻译:“这告诉我们两件事:a与ds是翁婿关系,pa有曾孙e、f、g、h、i和j。” “逻辑式语言着眼于关系而非函数,对付这类问题正是它的拿手好戏。”冒号声音逐渐高亢,“大家应该都听说过等式‘算法+数据结构=程序’吧?这是Pascal设计者Niklaus Wirth的一本著作的书名,它刻画了过程式尤其是结构化编程的思想。后来Robert Kowalski进一步提出:算法=逻辑+控制。其中逻辑是算法的核心,控制主要用于改进算法的效率。在逻辑式编程中,程序员只需表达逻辑,而控制交给编程语言的解释器或编译器去管理。” “所以程序员的负担大大减轻了。”问号接口道,“逻辑式编程听起来真是不错,但不知Prolog程序能否与Java程序对接呢?” 冒号回答:“任何程序之间的对接都是可能的,只是不同的对接方式在复杂度和效率上有所差异而已。除了通过程序之间的通讯(如socket)或可执行文件的直接调用外,Prolog与C、C++、Java、C#、VB、Perl、JavaScript等多种语言之间,还能借助工具进行源代码转换[2]或通过双向编程接口互嵌代码。具体到Java,一方面可以通过JNI (Java Native Interface)与Prolog引擎相连[3],另一方面可以利用Prolog引擎的Java实现来完成JVM上的集成[4]。” 句号请求:“能否总结一下逻辑式编程的优缺点?” 冒号欣然应允:“由于逻辑式编程模拟人类的逻辑思维,故而在机器证明、专家系统、自然语言处理、博弈等人工智能领域如鱼得水,同时在非学术领域的知识管理、智能决策分析等方面也能大显身手。同为声明式,它与函数式一样比命令式更简洁、更抽象、更少副作用,运用得当能大大提高生产效率,还能用于快速原型(rapid prototyping)开发。但缺点是运行效率偏低,可掌控性较差,与常规的过程式思维差异较大,更适合基于规则(rule-based)而不是基于状态(state-based)的应用[5]。此外,相对而言逻辑式语言还不够成熟和完善。” 逗号“抗议”道:“我怎么感觉经过这么一反刍,胃里的负担更重了?” 冒号略带歉意地笑了笑:“在所有编程范式中,函数式与逻辑式与传统思维方式的差别最大,此前的介绍又过于简单,因此今天特意多谈了些。既然有人提意见,那就我就适可而止了。最后请允许我画蛇添足:在代表计算机最高水平的人工智能领域中,这两种范式发挥着举足轻重的作用。单凭这一点,它们也是值得学习和借鉴的。好了,大家先休息十分钟,出去活动活动筋骨吧。” ,插语 [1] 用数学逻辑的话来说,事实与规则是公理,查询是定理。 [2] 如Prolog Café和P#能分别将Prolog代码转化为Java代码和C#代码。 [3] 比如JPL通过JNI与Prolog FLI (Foreign Language Interface)将Java与SWI-Prolog桥接起来。 [4] 比如JIProlog(Java Internet Prolog)是一个用Java实现的Prolog解释器,为Java和Prolog提供双向API。类似的还有JLog等。 [5] 交互式或事件驱动式应用通常是基于状态的。 总结 代码的长度不是衡量软件复杂度的唯一标准。其中的逻辑结构越复杂、越微妙、受需求变化的影响越大,软件越难控制和维护。 算法=逻辑+控制。逻辑式编程将算法中的控制部分大都移交给编程语言,编程人员主要关注算法的核心逻辑。这样大大减轻了程序员的负担,编码也更简洁易懂,更具可维护性和可扩展性。 有别于过程式和函数式,逻辑式没有明显的输入和输出之分 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |