Welcome 微信登录

首页 / 软件开发 / JAVA / 冒号课堂§4.2:逻辑范式

冒号课堂§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)./* 子列合并 */

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

大伙都乐了。