曾经有一段时间接触过Prolog,对其有一点点兴趣,但仅仅停留在用“friend(X,Y):-likes(X,Y),likes(Y,X).”耍耍人的层面。现在又无意中看到了它,觉得它真了不起,基于逻辑,还人工智能!于是去维基百科查看它的资料,一看还真傻了眼:
下面简洁的排序范例可以体会到为什么AI领域喜用Prolog:
/* sortcsj.pl 原始參考:Computer Science J. Glenn Brookshear */
/* sortcsj()中的第二個引數帶有排序好的結果 */
/* 僅為示範,若為gprolog使用者則用內建sort等較佳 */
/* 在gprolog下之編譯例:gplc --min-size sortcsj.pl */
/* 執行 sortcsj 後會出現排序結果 [2,9,18,18,25,33,66,77] */
q:- L=[33,18,2,77,18,66,9,25], (sortcsj(L,P), write(P), nl).
sortcsj(L,S) :- permutation(L,S), ordered(S). /* L為原list, S為排序好的list, 此為permutation關係(built-in) */
ordered([]). /* 表empty list視為排序好的list */
ordered([_|[]]). /* 只有一元素之list視為排序好的list */
ordered([A|[B|T]]) :- A =< B, ordered([B|T]). /* 此rule約束所謂的排序好是指前項元素小於或等於後一項元素 */
:- initialization(q). /* 啟動q處goals */
排序居然可以如此简单。还有如下: