Prolog(Programming in Logic的缩写)是一种逻辑编程语言。它建立在逻辑学的理论基础之上, 最初被运用于自然语言等研究领域。现在它已广泛的应用在人工智能的研究中,它可以用来建造专家系统、自然语言理解、智能知识库等。
== 历史 ==
Prolog语言的理论基础建立于爱丁堡大学的罗伯特·科瓦尔斯基对霍恩子句(Horn Clause)的程序性解释,最早由艾克斯-马赛大学的Alain Colmerauer与Phillipe Roussel等人于60年代末研究开发。1972年被公认为是Prolog语言正式诞生的年份,自1972年以后,分支出多种Prolog的方言。最主要的两种方言为爱丁堡和艾克斯-马赛。最早的Prolog解释器由Roussel建造,而第一个Prolog编译器则是David Warren编写的。
Prolog一直在北美和欧洲被广泛使用。日本政府曾经为了建造智能计算机而用Prolog来开发ICOT第五代计算机系统。在早期的机器智能研究领域,Prolog曾经是主要的开发工具。
80年代Borland开发的Turbo Prolog,进一步普及了Prolog的使用。1995年确定了ISO Prolog标准。
== 特點 ==
有別於一般的函数式语言,prolog的程式是基於謂詞邏輯的理論。最基本的寫法是定义物件與物件之間的關係,之後可以用詢問目標的方式來查詢各種物件之間的關係。系統會自動進行匹配及回溯,找出所詢問的答案。
Prolog代码中以大写字母开头的元素是变量,字符串、数字或以小写字母开头的元素是常量。下划线(_)被称为匿名变量。
== 语法示例 ==
事实语句,例如:
human(kate).
human(bill).
likes(kate,bill).
表示kate和bill是人(human),kate喜欢bill。
规则语句,例如:
friend(X,Y):-likes(X,Y),likes(Y,X).
表示对于两个对象XY,如果X喜欢Y,且Y喜欢X,那么他们是朋友。
== Prolog範例 ==
範例如下:
=== Quicksort ===
快速排序範例(對list作排序):
=== sort ===
下面簡潔的排序範例可以體會到為什麼AI領域喜用Prolog:
=== Russell's paradox ===
示範羅素悖論在Prolog下會導致堆疊溢位:
== 参考文献 ==
== 外部連結 ==
Prolog 人工智能语言中文论坛
实现
SWI-Prolog(页面存档备份,存于互联网档案馆)
Yap Prolog
== 参见 ==
Visual Prolog
LISP
non-Monotonic Logic