Prolog

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英语KL0KL1英语KL1、Mercury、Oz、Strand英语Strand (programming language)、Visual Prolog、XSB英语XSB

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

历史

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.  含有內容需登入查看的頁面 (link)

外部連結

  • Prolog 人工智能语言中文论坛
实现

参见

范型
过程式
面向对象
多范型
函数式
逻辑式
脚本语言
动态语言
Shell语言
ECMA-262
特定平台
.NET
JVM
特定领域
科学计算
GPU计算
  • Cg/HLSL
  • GLSL
  • Brook英语BrookGPU
  • OpenCL
  • CUDA/PTX英语Parallel Thread Execution
  • Futhark
  • SPIR-V英语Standard Portable Intermediate Representation
数据查询
可视化
传媒设计
 
其它
  • 分类 目录
  • 列表级条目 列表
  • 历史
  • 比较英语Comparison of programming languages
  • 时间线英语Timeline of programming languages
ISO標準
列表
国际标准化组织的标准列表英语List of International Organization for Standardization standards
国际标准化组织拉丁化方案列表
国际电工委员会标准列表英语List of IEC standards
1–9999
  • 1
  • 2
  • 3英语ISO 3
  • 4
  • 5
  • 6
  • 7英语ISO 7
  • 9
  • 16
  • 31
    • -0英语ISO 31-0
    • -1英语ISO 31-1
    • -2英语ISO 31-2
    • -3英语ISO 31-3
    • -4英语ISO 31-4
    • -5英语ISO 31-5
    • -6英语ISO 31-6
    • -7英语ISO 31-7
    • -8英语ISO 31-8
    • -9英语ISO 31-9
    • -10英语ISO 31-10
    • -11英语ISO 31-11
    • -12英语ISO 31-12
    • -13英语ISO 31-13
  • 128
  • 216
  • 217英语ISO 217
  • 226英语ISO 226
  • 228英语British standard pipe thread
  • 233
  • 259
  • 269
  • 302英语Kappa number
  • 306英语Vicat softening point
  • 428英语ISO 428
  • 518
  • 519
  • 639
  • 646
  • 690
  • 732
  • 764英语Antimagnetic watch
  • 843
  • 898英语ISO 898
  • 965英语ISO 965
  • 1000
  • 1004英语Magnetic ink character recognition
  • 1007
  • 1073-1英语OCR-A font
  • 1413英语ISO 1413
  • 1538
  • 1745英语ISO 1745
  • 1989
  • 2014英语ISO 2014
  • 2015英语ISO 2015
  • 2022
  • 2047英语ISO 2047
  • 2108
  • 2145
  • 2146英语ISO 2146
  • 2240
  • 2281英语Water Resistant mark
  • 2709英语ISO 2709
  • 2711英语ISO 2711
  • 2788英语ISO 2788
  • 2852英语ISO 2852
  • 3029英语126 film
  • 3103
  • 3166
  • 3297
  • 3307英语ISO 3307
  • 3602
  • 3758
  • 3864英语ISO 3864
  • 3901
  • 3977英语ISO 3977
  • 4031英语ISO 4031
  • 4157英语ISO 4157
  • 4217
  • 4909英语ISO/IEC 4909
  • 5218
  • 5428英语ISO 5428
  • 5775英语ISO 5775
  • 5776英语ISO 5776
  • 5800
  • 5807
  • 5964英语ISO 5964
  • 6166
  • 6344英语ISO 6344
  • 6346英语ISO 6346
  • 6385英语ISO 6385
  • 6425英语Water Resistant mark
  • 6429英语ANSI escape code
  • 6438
  • 6523英语ISO 6523
  • 6709
  • 7001
  • 7002英语ISO 7002
  • 7064英语ISO 7064
  • 7098
  • 7185
  • 7200英语ISO 7200
  • 7498
  • 7637
  • 7736英语ISO 7736
  • 7810
  • 7811英语ISO/IEC 7811
  • 7812
  • 7813英语ISO/IEC 7813
  • 7816
  • 8000
  • 8178英语ISO 8178
  • 8217
  • 8571英语FTAM
  • 8583英语ISO 8583
  • 8601
  • 8632
  • 8652英语ISO/IEC 8652
  • 8691英语ISO 8691
  • 8807英语Language Of Temporal Ordering Specification
  • 8820-5英语ISO/IEC 8820-5
  • 8859
  • 8879
  • 9000/9001
  • 9075
  • 9126
  • 9293
  • 9241英语ISO 9241
  • 9362
  • 9407
  • 9506英语Manufacturing Message Specification
  • 9529英语ISO 9529
  • 9564英语ISO 9564
  • 9594
  • 9660
  • 9897英语ISO 9897
  • 9899
  • 9945
  • 9984
  • 9985
  • 9995
10000–19999
  • 10005英语ISO 10005
  • 10006英语ISO 10006
  • 10007英语ISO 10007
  • 10116英语ISO/IEC 10116
  • 10118-3英语Whirlpool (cryptography)
  • 10160英语ISO 10160
  • 10161英语ISO 10161
  • 10165英语Guidelines for the Definition of Managed Objects
  • 10179英语Document Style Semantics and Specification Language
  • 10206
  • 10218英语ISO 10218
  • 10303
    • -11英语EXPRESS (data modeling language)
    • -21
    • -22英语ISO 10303-22
    • -28英语ISO 10303-28
    • -238英语STEP-NC
  • 10383英语ISO 10383
  • 10487英语ISO 10487
  • 10585
  • 10589
  • 10646
  • 10664
  • 10746英语RM-ODP
  • 10861英语Multibus
  • 10957
  • 10962英语ISO 10962
  • 10967英语ISO/IEC 10967
  • 11073英语ISO/IEEE 11073
  • 11170英语ISO 11170
  • 11179英语ISO/IEC 11179
  • 11404英语ISO/IEC 11404
  • 11544
  • 11783英语ISO 11783
  • 11784英语ISO 11784 & 11785
  • 11785英语ISO 11784 & 11785
  • 11801
  • 11898
  • 11940 (-2英语ISO 11940-2)
  • 11941英语ISO/TR 11941
  • 11941 (TR)英语ISO/TR 11941
  • 11992英语ISO 11992
  • 12006英语ISO 12006
  • 12182英语ISO/IEC TR 12182
  • 12207英语ISO/IEC 12207
  • 12234-2英语Tag Image File Format / Electronic Photography
  • 13211
    • -1
    • -2
  • 13216英语Isofix
  • 13250
  • 13399英语ISO 13399
  • 13406-2英语ISO 13406-2
  • 13450英语110 film
  • 13485英语ISO 13485
  • 13490英语ISO 13490
  • 13567英语ISO 13567
  • 13568英语Z notation
  • 13584英语ISO 13584
  • 13616
  • 14000
  • 14031
  • 14224英语ISO 14224
  • 14289英语PDF/UA
  • 14396
  • 14443
  • 14496
    • -2英语MPEG-4 Part 2
    • -3英语MPEG-4 Part 3
    • -6英语Delivery Multimedia Integration Framework
    • -10
    • -11英语MPEG-4 Part 11
    • -12英语MPEG-4 Part 12
    • -14
    • -17
    • -20
  • 14644英语ISO 14644
  • 14649英语STEP-NC
  • 14651英语ISO 14651
  • 14698英语ISO 14698
  • 14750英语ISO 14750
  • 14764
  • 14882
  • 14971英语ISO 14971
  • 15022英语ISO 15022
  • 15189英语ISO 15189
  • 15288英语ISO/IEC 15288
  • 15291英语Ada Semantic Interface Specification
  • 15292英语ISO 15292
  • 15398英语ISO 15398
  • 15408
  • 15444
    • -3英语Motion JPEG 2000
  • 15445
  • 15438
  • 15504
  • 15511
  • 15686英语ISO 15686
  • 15693英语ISO/IEC 15693
  • 15706
    • -2英语ISO 15706-2
  • 15707
  • 15897英语ISO 15897
  • 15919
  • 15924
  • 15926英语ISO 15926
  • 15926 WIP英语ISO 15926 WIP
  • 15930英语PDF/X
  • 16023英语MaxiCode
  • 16262
  • 16612-2英语PDF/VT
  • 16750
  • 16949 (TS)
  • 17024英语ISO/IEC 17024
  • 17025英语ISO/IEC 17025
  • 17100英语ISO 17100:2015
  • 17203
  • 17369英语SDMX
  • 17442英语Legal Entity Identifier
  • 17799
  • 18000英语ISO/IEC 18000
  • 18004
  • 18014英语ISO/IEC 18014
  • 18245英语ISO 18245
  • 18629英语Process Specification Language
  • 18916英语Photographic Activity Test
  • 19005
  • 19011英语ISO 19011
  • 19092 (-1英语ISO 19092-1
  • -2)英语ISO 19092-2
  • 19114英语ISO 19114
  • 19115英语ISO 19115
  • 19125英语Simple feature access
  • 19136
  • 19439英语ISO 19439
  • 19500
  • 19501
  • 19502
  • 19503英语XML Metadata Interchange
  • 19505
  • 19506英语Knowledge Discovery Metamodel
  • 19507英语Object Constraint Language
  • 19508
  • 19509英语XML Metadata Interchange
  • 19510
  • 19600:2014英语ISO 19600:2014
  • 19752英语ISO/IEC 19752
  • 19757英语RELAX NG
  • 19770英语ISO/IEC 19770
  • 19775-1
  • 19794-5英语ISO/IEC 19794-5
  • 19831英语Cloud Infrastructure Management Interface
20000+
  • 20000
  • 20022英语ISO 20022
  • 20121英语ISO 20121
  • 20400英语ISO 20400
  • 21000
  • 21047英语International Standard Text Code
  • 21500英语ISO 21500
  • 21827:2002英语ISO/IEC 21827
  • 22000
  • 22301
  • 23270
  • 23271
  • 23360
  • 24517英语PDF/E
  • 24613
  • 24617英语ISO-TimeML
  • 24707英语Common Logic
  • 24778
  • 25178英语ISO 25178
  • 25964英语ISO 25964
  • 26000英语ISO 26000
  • 26262
  • 26300
  • 26324
  • 27000 series
  • 27000英语ISO/IEC 27000
  • 27001
  • 27002
  • 27006英语ISO/IEC 27006
  • 27729
  • 28000英语ISO/PAS 28000
  • 29110英语ISO 29110
  • 29148英语Requirements engineering
  • 29199-2
  • 29500
  • 30170
  • 31000英语ISO 31000
  • 32000
  • 38500英语ISO/IEC 38500
  • 40500
  • 42010英语ISO/IEC 42010
  • 45001
  • 55000英语ISO 55000
  • 80000
    • -1英语ISO 80000-1
    • -2
    • -3英语ISO 80000-3
  • 参见:
  • 分类 ISO标准
  • 所有前缀有“ISO”的页面