冒号课堂§4.2:逻辑范式 - 编程入门网
*/
/* 关系列表 */
relations([parent,father,mother,son,daughter,grandparent,grandfather,
grandmother,grandchild,grandson,granddaughter,
sibling,brother,sister,cousin,uncle,aunt,nephew,niece]).
parent(a,b). parent(a,c). parent(a,d).
parent(b,e). parent(b,f).
parent(c,g).
parent(d,h). parent(d,i). parent(d,j).
male(a).
male(b).
male(c).
female (d).
female (e).
male(f).
female (g).
male(h).
female (i).
male(j).
冒号课堂§4.2:逻辑范式(4)时间:2011-06-27 BlogJava xyz98叹号没有看出名堂:“Prolog代码并不比Java代码简短多少啊。” “评价代码的复杂度,长短只是一个因素。程序员不是打字员,花在思考上的时间和精力远远超过花在键盘上。”冒号指出,“就拿此例来说,Java代码虽然并不复杂,但有不少的选择分支语句,次序很重要。稍有不慎,就会出现逻辑错误。另外如果我们把关系分得更细致些,比如区分叔伯舅、姑姨婶、堂兄表妹等;再加入姻亲关系,比如姑嫂婆媳、妯娌连襟等。这时你再来改写这段代码试试?” 引号听得头皮有些发麻:“那一定需要不少重重嵌套的if-else语句了。” 问号提出的问题更让人头痛:“如果我们不限于三代,再加上曾孙女、曾叔父之类的关系呢?” 逗号联想到一则笑话:“话说一对父子与一对母女联姻,作父亲的娶了那位女儿,作儿子的娶了那位母亲。本来关系已经够颠倒错乱了,雪上加霜的是这两对夫妇又各自有了子女,那位父亲终于精神崩溃了。” 大家哄笑着:这下彻底乱套啰。 “前面的Java代码之所以没有嵌套,得益于及时退出的一些return语句。如果考虑到超过三代的关系以及多重交叉的关系,许多语句都得改写。可见上述代码是多么地脆弱!” 冒号就棍打腿,“再看Prolog代码,如果要求更细的血亲关系、增加姻亲关系或三代以上的关系,只需引入新的规则和事实即可,不会影响原有代码。下面列出几个示范语句——”
句号方悟其妙:“这样的代码既无层层嵌套,也无次序分别。比起过程式,编写轻松得多,程序的可维护性和可扩展性也更高。” “此外另有妙处。逻辑式与过程式和函数式的一个不同之处是,它没有明显的输入、输出之分。上面的程序不仅可以用来判断任意二人之间的关系,还能倒过来通过关系来找人。”冒号板书了几行字——
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |