快速业务通道

冒号课堂§4.2:逻辑范式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
     /* 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

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号