fbpx
维基百科

Prolog

PrologProgramming in Logic的缩写)是一种逻辑编程语言。它建立在逻辑学的理论基础之上, 最初被运用于自然语言等研究领域。现在它已广泛的应用在人工智能的研究中,它可以用来建造专家系统自然语言理解、智能知识库等。[1][2][3][4][5]

Prolog
编程范型逻辑式
設計者Alain Colmerauer英语Alain Colmerauer罗伯特·科瓦尔斯基
发行时间1972年
文件扩展名.pl, .pro, .P
主要實作產品
B-Prolog英语B-Prolog, Ciao语言英语Ciao (programming language), ECLiPSe英语ECLiPSe, GNU Prolog英语GNU Prolog, Poplog英语Poplog Prolog, P#, Quintus Prolog, SICStus英语SICStus, Strawberry英语Strawberry Prolog, SWI-Prolog英语SWI-Prolog, Tau Prolog, tuProlog英语tuProlog, WIN-PROLOG英语Logic Programming Associates, XSB英语XSB, YAP英语YAP (Prolog)
衍生副語言
ISO Prolog, Edinburgh Prolog
啟發語言
PLANNER英语PLANNER
影響語言
CHR英语Constraint Handling RulesClojureDatalogErlangKL0英语KL0KL1英语KL1MercuryOzStrand英语Strand (programming language)Visual PrologXSB英语XSB

历史 编辑

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作排序):

/* quicksort2.pl 原始來源:http://en.wikipedia.org/wiki/Prolog */ /* quicksort()中的第二個引數帶有排序好的結果 */ /* 僅為示範,若為gprolog使用者則用內建sort等較佳 */ /* 在gprolog下之編譯例:gplc --min-size quicksort2.pl */ /* 執行 quicksort2 後會出現排序結果 [2,9,18,18,25,33,66,77] */ q:- L=[33,18,2,77,66,18,9,25], last(P,_), (quicksort(L,P,_), write(P), nl). /* 加入last/2會在印P時沒複合項 */ partition([], _, [], []). /* 此行表空集亦視為分割(分割成空集與空集)*/ partition([X|Xs], Pivot, Smalls, Bigs) :- /* 原list分成Smalls與Bigs; 此规则保證Smalls集<Pivot且Bigs集>=Pivot */ ( X @< Pivot -> Smalls = [X|Rest], partition(Xs, Pivot, Rest, Bigs) ; Bigs = [X|Rest], partition(Xs, Pivot, Smalls, Rest) ). quicksort([]) --> []. /* 表empty list視為排序好的list */ quicksort([X|Xs]) --> /* 此行相當於quicksort([X|Xs],Start,End) :- 此规则讓Start為sorted list */ { partition(Xs, X, Smaller, Bigger) }, /* 由上行最左端元素為 Pivot */ quicksort(Smaller), [X], quicksort(Bigger). /* 此行相當於 quicksort(Smaller,Start,A),  A=[X|B], 注意首字母大寫者皆視為變數(list)  quicksort(Bigger,B,End). */ :- initialization(q). /* 啟動q處goals */ 


sort 编辑

下面簡潔的排序範例可以體會到為什麼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]). /* 此规则約束所謂的排序好是指前項元素小於或等於後一項元素 */ :- initialization(q). /* 啟動q處goals */ 


Russell's paradox 编辑

示範羅素悖論在Prolog下會導致堆疊溢位

/* tstpx.pl */ /* 羅素佯謬(羅素悖論)(皇帝新腦 羅杰.彭羅斯 p.120)會導致不停機(使得gprolog產生 stack overflow) */ /* 在gprolog下之編譯例:gplc --min-size tstpx.pl */ q:- px(_). /* 找尋任何可使 px() 规则成立的方式 */ px(1) :- \+ px(1). /* 規定此规则不成立。 i.e. 此规则為假時此规则才為真 (佯謬)*/ :- initialization(q). /* 啟動q處goal */ 

参考文献 编辑

  1. ^ Clocksin, William F.; Mellish, Christopher S. Programming in Prolog. Berlin; New York: Springer-Verlag. 2003. ISBN 978-3-540-00678-7. 
  2. ^ Bratko, Ivan. Prolog programming for artificial intelligence 4th. Harlow, England; New York: Addison Wesley. 2012. ISBN 978-0-321-41746-6. 
  3. ^ Covington, Michael A. Natural language processing for Prolog programmers. Englewood Cliffs, N.J.: Prentice Hall. 1994. ISBN 978-0-13-629213-5. 
  4. ^ Stickel, M. E. A prolog technology theorem prover: Implementation by an extended prolog compiler. Journal of Automated Reasoning. 1988, 4 (4): 353–380. CiteSeerX 10.1.1.47.3057 . S2CID 14621218. doi:10.1007/BF00297245. 
  5. ^ Merritt, Dennis. Building expert systems in Prolog . Berlin: Springer-Verlag. 1989. ISBN 978-0-387-97016-5. 

外部連結 编辑

    实现

    参见 编辑

    prolog, programming, logic, 的缩写, 是一种逻辑编程语言, 它建立在逻辑学的理论基础之上, 最初被运用于自然语言等研究领域, 现在它已广泛的应用在人工智能的研究中, 它可以用来建造专家系统, 自然语言理解, 智能知识库等, 编程范型逻辑式設計者alain, colmerauer, 英语, alain, colmerauer, 罗伯特, 科瓦尔斯基发行时间1972年文件扩展名, p主要實作產品b, 英语, ciao语言, 英语, ciao, programming, language, e. Prolog Programming in Logic 的缩写 是一种逻辑编程语言 它建立在逻辑学的理论基础之上 最初被运用于自然语言等研究领域 现在它已广泛的应用在人工智能的研究中 它可以用来建造专家系统 自然语言理解 智能知识库等 1 2 3 4 5 Prolog编程范型逻辑式設計者Alain Colmerauer 英语 Alain Colmerauer 罗伯特 科瓦尔斯基发行时间1972年文件扩展名 pl pro P主要實作產品B Prolog 英语 B Prolog Ciao语言 英语 Ciao programming language ECLiPSe 英语 ECLiPSe GNU Prolog 英语 GNU Prolog Poplog 英语 Poplog Prolog P Quintus Prolog SICStus 英语 SICStus Strawberry 英语 Strawberry Prolog SWI Prolog 英语 SWI Prolog Tau Prolog tuProlog 英语 tuProlog WIN PROLOG 英语 Logic Programming Associates XSB 英语 XSB YAP 英语 YAP Prolog 衍生副語言ISO Prolog Edinburgh Prolog啟發語言PLANNER 英语 PLANNER 影響語言CHR 英语 Constraint Handling Rules Clojure Datalog Erlang KL0 英语 KL0 KL1 英语 KL1 Mercury Oz Strand 英语 Strand programming language Visual Prolog XSB 英语 XSB 維基教科書中有關Prolog的文本 目录 1 历史 2 特點 3 语法示例 4 Prolog範例 4 1 Quicksort 4 2 sort 4 3 Russell s paradox 5 参考文献 6 外部連結 7 参见历史 编辑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作排序 quicksort2 pl 原始來源 http en wikipedia org wiki Prolog quicksort 中的第二個引數帶有排序好的結果 僅為示範 若為gprolog使用者則用內建sort等較佳 在gprolog下之編譯例 gplc min size quicksort2 pl 執行 quicksort2 後會出現排序結果 2 9 18 18 25 33 66 77 q L 33 18 2 77 66 18 9 25 last P quicksort L P write P nl 加入last 2會在印P時沒複合項 partition 此行表空集亦視為分割 分割成空集與空集 partition X Xs Pivot Smalls Bigs 原list分成Smalls與Bigs 此规则保證Smalls集 lt Pivot且Bigs集 gt Pivot X lt Pivot gt Smalls X Rest partition Xs Pivot Rest Bigs Bigs X Rest partition Xs Pivot Smalls Rest quicksort gt 表empty list視為排序好的list quicksort X Xs gt 此行相當於quicksort X Xs Start End 此规则讓Start為sorted list partition Xs X Smaller Bigger 由上行最左端元素為 Pivot quicksort Smaller X quicksort Bigger 此行相當於 quicksort Smaller Start A A X B 注意首字母大寫者皆視為變數 list quicksort Bigger B End initialization q 啟動q處goals sort 编辑 下面簡潔的排序範例可以體會到為什麼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 lt B ordered B T 此规则約束所謂的排序好是指前項元素小於或等於後一項元素 initialization q 啟動q處goals Russell s paradox 编辑 示範羅素悖論在Prolog下會導致堆疊溢位 tstpx pl 羅素佯謬 羅素悖論 皇帝新腦 羅杰 彭羅斯 p 120 會導致不停機 使得gprolog產生 stack overflow 在gprolog下之編譯例 gplc min size tstpx pl q px 找尋任何可使 px 规则成立的方式 px 1 px 1 規定此规则不成立 i e 此规则為假時此规则才為真 佯謬 initialization q 啟動q處goal 参考文献 编辑 Clocksin William F Mellish Christopher S Programming in Prolog Berlin New York Springer Verlag 2003 ISBN 978 3 540 00678 7 Bratko Ivan Prolog programming for artificial intelligence 4th Harlow England New York Addison Wesley 2012 ISBN 978 0 321 41746 6 Covington Michael A Natural language processing for Prolog programmers Englewood Cliffs N J Prentice Hall 1994 ISBN 978 0 13 629213 5 Stickel M E A prolog technology theorem prover Implementation by an extended prolog compiler Journal of Automated Reasoning 1988 4 4 353 380 CiteSeerX 10 1 1 47 3057 nbsp S2CID 14621218 doi 10 1007 BF00297245 Merritt Dennis Building expert systems in Prolog nbsp Berlin Springer Verlag 1989 ISBN 978 0 387 97016 5 含有內容需登入查看的頁面 link 外部連結 编辑Prolog 人工智能语言中文论坛实现SWI Prolog 页面存档备份 存于互联网档案馆 Yap Prolog参见 编辑Visual Prolog LISP non Monotonic Logic 取自 https zh wikipedia org w index php title Prolog amp oldid 77989195, 维基百科,wiki,书籍,书籍,图书馆,

    文章

    ,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。