快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

冒号课堂§4.2:逻辑范式

时间:2011-06-27 BlogJava xyz98

第四课 重温范式(2)

4.2逻辑范式——当算法失去了控制

道常无为而无不为             ——《老子·道经》

关键词:   编程范式,逻辑式编程,Prolog,算法,逻辑,控制

摘要:  再谈逻辑式编程

?提问

衡量软件复杂度是由代码的长度决定的吗?

为什么逻辑式的编码一般比过程式的更简洁?

逻辑式编程相比命令式编程有哪些优势和劣势?

:讲解

问号提出:“逻辑式编程不是也很特别吗?前面似乎介绍得也不多。”

“那我们就用逻辑式语言Prolog再实现一次quicksort吧。”冒号说着将幻灯片翻页——

/*快速排序法的Prolog实现*/ /* 定义划分法 */ partition(_,[],[],[]).                         /* 划分递归终点 */ partition(Pivot,[X|Rest],[X|Small],Big) :- X < Pivot, partition(Pivot,Rest,Small,Big).   /* 比基准小的归入Small */ partition(Pivot,[X|Rest],Small,[X|Big]) :- X >= Pivot, partition(Pivot,Rest,Small,Big).  /* 比基准大的归入Big */ /* 定义排序法 */ qsort([],[]).                                /* 排序递归终点 */ qsort([Pivot|Rest],Sorted) :- partition(Pivot,Rest,Small,Big),            /* 按基准划分子列 */     qsort(Small,SortedSmall),                 /* 对前面的子列递归 */     qsort(Big,SortedBig),                     /* 对后面的子列递归 */     append(SortedSmall,[Pivot|SortedBig],Sorted)./* 子列合并 */

逗号挠挠头:“看不太懂哦,好在我记住了您的一句话:容忍无知。我忍了!”

大伙都乐了。

冒号课堂§4.2:逻辑范式(2)

时间:2011-06-27 BlogJava xyz98

“本节课的焦点不是语言而是范式,因此对Prolog代码不详加解说。我只简单地说三点:首先,Prolog代码是由一系列事实(fact)、规则(rule)和查询(query)语句组成的[1]。其次,与大多数语言不同的是,大写字母或下划线开头的标识符是变量,其他的是常量或函数。请注意,这不是约定俗成,而是语法规定。最后,符号‘:-’等价于if;逗号‘,’等价于and。比如,我们可以用Prolog来表达一个断言:如果一个人未婚且为男士,那么他就是一光棍。”冒号转身在黑板上写下——

/* X is bachelor if X is unmarried and male*/ bachelor (X) :- unmarried(X) , male(X).

听见下面一阵嘀咕声,冒号忽地闪过一个念头:这个例子该不会伤了某位满足条件的同志吧?顿了一会,继续说道:“逻辑式实现的排序虽不比函数式更简洁,但比过程式来还是绰绰有余的。毕竟同属声明式,省去了不少有关变量赋值、迭代和流程控制方面的代码。我们再看一个更加典型的范例。”

黑板上出现了一幅树状图形——

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

冒号简作说明:“这是一个三代家谱图。已知每人的性别和父辈,要求判断任意两人之间的关系。我们先用Java来试一试——”

class Person {    private Person parent;    private boolean isMale;    public Person(Person parent, boolean isMale)    {      this.isMale = isMale;      this.parent = parent;    } private boolean isSibling(Person other)    {      return parent == other.parent && parent != null && this != other;    }    public String getRelation(Person other)  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号