<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Prolog</id>
	<title>Prolog - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Prolog"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Prolog&amp;action=history"/>
	<updated>2026-07-01T22:24:14Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Prolog&amp;diff=2927&amp;oldid=prev</id>
		<title>imported&gt;InternetArchiveBot：​Add 1 book for verifiability (20231017sim)) #IABot (v2.0.9.5) (GreenC bot</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Prolog&amp;diff=2927&amp;oldid=prev"/>
		<updated>2023-10-17T21:08:42Z</updated>

		<summary type="html">&lt;p&gt;Add 1 book for verifiability (20231017sim)) #IABot (v2.0.9.5) (&lt;a href=&quot;/index.php?title=User:GreenC_bot&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:GreenC bot（页面不存在）&quot;&gt;GreenC bot&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA&lt;br /&gt;
|G1=IT&lt;br /&gt;
|1=zh-hans:对象; zh-hant:物件;&lt;br /&gt;
|2=zh-hans:逻辑编程; zh-hant:邏輯程式設計;&lt;br /&gt;
}}&lt;br /&gt;
{{Infobox programming language&lt;br /&gt;
| paradigm        = [[邏輯編程|逻辑式]]&lt;br /&gt;
| year            = 1972年&lt;br /&gt;
| designer        = {{tsl|en|Alain Colmerauer}}，[[罗伯特·科瓦尔斯基]]&lt;br /&gt;
| implementations = {{tsl|en|B-Prolog}}, {{tsl|en|Ciao (programming language)|Ciao语言}}, {{tsl|en|ECLiPSe}}, {{tsl|en|GNU Prolog}}, {{tsl|en|Poplog}} Prolog, [[P#]], [https://quintus.sics.se/ Quintus Prolog], {{tsl|en|SICStus}}, {{tsl|en|Strawberry Prolog|Strawberry}}, {{tsl|en|SWI-Prolog}}, [http://tau-prolog.org/ Tau Prolog], {{tsl|en|tuProlog}}, {{tsl|en|Logic Programming Associates|WIN-PROLOG}}, {{tsl|en|XSB}}, {{tsl|en|YAP (Prolog)|YAP}}&lt;br /&gt;
| dialects        = ISO Prolog, Edinburgh Prolog&lt;br /&gt;
| influenced by   = {{tsl|en|PLANNER}}&lt;br /&gt;
| influenced      = {{tsl|en|Constraint Handling Rules|约束处理规则|CHR}}、[[Clojure]]、[[Datalog]]、[[Erlang]]、{{tsl|en|KL0}}、{{tsl|en|KL1}}、[[Mercury (编程语言)|Mercury]]、[[Oz_(编程语言)|Oz]]、{{tsl|en|Strand (programming language)|Strand}}、[[Visual Prolog]]、{{tsl|en|XSB}}&lt;br /&gt;
| file_ext        = &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.pro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.P&amp;lt;/code&amp;gt;&lt;br /&gt;
| wikibooks       = Prolog&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Prolog&amp;#039;&amp;#039;&amp;#039;（{{lang|en|&amp;#039;&amp;#039;&amp;#039;Pro&amp;#039;&amp;#039;&amp;#039;gramming in &amp;#039;&amp;#039;&amp;#039;Log&amp;#039;&amp;#039;&amp;#039;ic}}的缩写）是一种[[逻辑编程]]语言。它建立在[[逻辑学]]的理论基础之上， 最初被运用于[[自然语言]]等研究领域。现在它已广泛的应用在[[人工智能]]的研究中，它可以用来建造[[专家系统]]、[[自然语言理解]]、智能知识库等。&amp;lt;ref name=Clocksin2003&amp;gt;{{Cite book  | last1 = Clocksin | first1 = William F. | last2 = Mellish | first2 = Christopher S. | title = Programming in Prolog | year = 2003 | publisher = Springer-Verlag | location = Berlin; New York | isbn = 978-3-540-00678-7 }}&amp;lt;/ref&amp;gt;&amp;lt;ref name=Bratko2012&amp;gt;{{Cite book  | last1 = Bratko | first1 = Ivan | title = Prolog programming for artificial intelligence |edition = 4th | year = 2012 | publisher = Addison Wesley | location = Harlow, England; New York | isbn = 978-0-321-41746-6 }}&amp;lt;/ref&amp;gt;&amp;lt;ref name=Covington1994&amp;gt;{{Cite book  | last1 = Covington | first1 = Michael A. | title = Natural language processing for Prolog programmers | url = https://archive.org/details/naturallanguagep0000covi | year = 1994 | publisher = Prentice Hall | location = Englewood Cliffs, N.J. | isbn = 978-0-13-629213-5 }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite journal | last1 = Stickel | first1 = M. E. | title = A prolog technology theorem prover: Implementation by an extended prolog compiler | url = https://archive.org/details/sim_journal-of-automated-reasoning_1988-12_4_4/page/353 | journal = Journal of Automated Reasoning | volume = 4 | issue = 4 | pages = 353–380 | year = 1988 | doi = 10.1007/BF00297245| citeseerx = 10.1.1.47.3057 | s2cid = 14621218 }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite book |author=Merritt, Dennis |title=Building expert systems in Prolog |publisher=Springer-Verlag |location=Berlin |year=1989 |isbn=978-0-387-97016-5 |url-access=registration |url=https://archive.org/details/buildingexpertsy0000merr }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 历史 ==&lt;br /&gt;
Prolog语言的理论基础建立于[[爱丁堡大学]]的[[罗伯特·科瓦尔斯基]]对[[霍恩子句]]（Horn Clause）的程序性解释，最早由[[艾克斯-马赛大学]]的Alain Colmerauer与Phillipe Roussel等人于60年代末研究开发。1972年被公认为是Prolog语言正式诞生的年份，自1972年以后，分支出多种Prolog的方言。最主要的两种方言为[[爱丁堡]]和[[普罗旺斯地区艾克斯|艾克斯]]-[[马赛]]。最早的Prolog解释器由Roussel建造，而第一个Prolog编译器则是David Warren编写的。&lt;br /&gt;
&lt;br /&gt;
Prolog一直在北美和欧洲被广泛使用。日本政府曾经为了建造智能计算机而用Prolog来开发ICOT第五代计算机系统。在早期的机器智能研究领域，Prolog曾经是主要的开发工具。&lt;br /&gt;
&lt;br /&gt;
80年代Borland开发的Turbo Prolog，进一步普及了Prolog的使用。1995年确定了ISO Prolog标准。&lt;br /&gt;
&lt;br /&gt;
== 特點 ==&lt;br /&gt;
有別於一般的[[函数式语言]]，prolog的程式是基於謂詞邏輯的理論。最基本的寫法是定义[[物件 (電腦科學)|物件]]與物件之間的關係，之後可以用詢問目標的方式來查詢各種物件之間的關係。系統會自動進行匹配及[[回溯法|回溯]]，找出所詢問的答案。&lt;br /&gt;
&lt;br /&gt;
Prolog代码中以大写字母开头的元素是&amp;#039;&amp;#039;&amp;#039;变量&amp;#039;&amp;#039;&amp;#039;，[[字符串]]、数字或以小写字母开头的元素是&amp;#039;&amp;#039;&amp;#039;常量&amp;#039;&amp;#039;&amp;#039;。下划线（_）被称为匿名变量。&lt;br /&gt;
&lt;br /&gt;
== 语法示例 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;事实语句&amp;#039;&amp;#039;&amp;#039;，例如：&lt;br /&gt;
 human(kate).&lt;br /&gt;
 human(bill).&lt;br /&gt;
 likes(kate,bill).&lt;br /&gt;
表示kate和bill是人（human），kate喜欢bill。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;规则语句&amp;#039;&amp;#039;&amp;#039;，例如：&lt;br /&gt;
 friend(X,Y):-likes(X,Y),likes(Y,X).&lt;br /&gt;
表示对于两个对象XY，如果X喜欢Y，且Y喜欢X，那么他们是朋友。&lt;br /&gt;
&lt;br /&gt;
== Prolog範例 ==&lt;br /&gt;
範例如下：&lt;br /&gt;
&lt;br /&gt;
=== Quicksort ===&lt;br /&gt;
[[快速排序]]範例（對list作排序）：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;prolog&amp;quot;&amp;gt;&lt;br /&gt;
/* quicksort2.pl    原始來源：http://en.wikipedia.org/wiki/Prolog   */&lt;br /&gt;
/* quicksort()中的第二個引數帶有排序好的結果　*/&lt;br /&gt;
/* 僅為示範，若為gprolog使用者則用內建sort等較佳 */&lt;br /&gt;
/* 在gprolog下之編譯例：gplc --min-size quicksort2.pl　*/&lt;br /&gt;
/*   執行 quicksort2 後會出現排序結果 [2,9,18,18,25,33,66,77] */&lt;br /&gt;
&lt;br /&gt;
q:- L=[33,18,2,77,66,18,9,25], last(P,_), (quicksort(L,P,_), write(P), nl).    /* 加入last/2會在印P時沒複合項 */&lt;br /&gt;
&lt;br /&gt;
partition([], _, [], []).			/* 此行表空集亦視為分割（分割成空集與空集）*/&lt;br /&gt;
partition([X|Xs], Pivot, Smalls, Bigs) :-	/* 原list分成Smalls與Bigs; 此规则保證Smalls集&amp;lt;Pivot且Bigs集&amp;gt;=Pivot */&lt;br /&gt;
    (   X @&amp;lt; Pivot -&amp;gt;&lt;br /&gt;
        Smalls = [X|Rest],&lt;br /&gt;
        partition(Xs, Pivot, Rest, Bigs)&lt;br /&gt;
    ;   Bigs = [X|Rest],&lt;br /&gt;
        partition(Xs, Pivot, Smalls, Rest)&lt;br /&gt;
    ).&lt;br /&gt;
 &lt;br /&gt;
quicksort([])     --&amp;gt; [].			/* 表empty list視為排序好的list */&lt;br /&gt;
quicksort([X|Xs]) --&amp;gt;			/* 此行相當於quicksort([X|Xs],Start,End) :-  此规则讓Start為sorted list */&lt;br /&gt;
    { partition(Xs, X, Smaller, Bigger) },	/* 由上行最左端元素為 Pivot */&lt;br /&gt;
    quicksort(Smaller), [X], quicksort(Bigger).	/* 此行相當於	quicksort(Smaller,Start,A),&lt;br /&gt;
    								A=[X|B],  注意首字母大寫者皆視為變數(list)&lt;br /&gt;
								quicksort(Bigger,B,End).  */&lt;br /&gt;
:- initialization(q).		/* 啟動q處goals */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== sort ===&lt;br /&gt;
下面簡潔的排序範例可以體會到為什麼AI領域喜用Prolog：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;prolog&amp;quot;&amp;gt;&lt;br /&gt;
/* sortcsj.pl    原始參考：Computer Science  J. Glenn Brookshear   */&lt;br /&gt;
/* sortcsj()中的第二個引數帶有排序好的結果　*/&lt;br /&gt;
/* 僅為示範，若為gprolog使用者則用內建sort等較佳 */&lt;br /&gt;
/* 在gprolog下之編譯例：gplc --min-size sortcsj.pl　*/&lt;br /&gt;
/*   執行 sortcsj 後會出現排序結果 [2,9,18,18,25,33,66,77] */&lt;br /&gt;
&lt;br /&gt;
q:- L=[33,18,2,77,18,66,9,25], (sortcsj(L,P), write(P), nl). &lt;br /&gt;
&lt;br /&gt;
sortcsj(L,S) :-  permutation(L,S), ordered(S).	/* L為原list, S為排序好的list, 此為permutation關係(built-in) */&lt;br /&gt;
&lt;br /&gt;
ordered([]).			/* 表empty list視為排序好的list */&lt;br /&gt;
ordered([_|[]]).			/* 只有一元素之list視為排序好的list */&lt;br /&gt;
ordered([A|[B|T]]) :- A =&amp;lt; B, ordered([B|T]).	/* 此规则約束所謂的排序好是指前項元素小於或等於後一項元素 */&lt;br /&gt;
&lt;br /&gt;
:- initialization(q).		/* 啟動q處goals */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Russell&amp;#039;s paradox ===&lt;br /&gt;
示範[[羅素悖論]]在Prolog下會導致[[堆疊溢位]]：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;prolog&amp;quot;&amp;gt;&lt;br /&gt;
/* tstpx.pl */&lt;br /&gt;
/* 羅素佯謬(羅素悖論)（皇帝新腦 羅杰.彭羅斯 p.120）會導致不停機(使得gprolog產生 stack overflow) */&lt;br /&gt;
/* 在gprolog下之編譯例：gplc --min-size tstpx.pl　*/&lt;br /&gt;
&lt;br /&gt;
q:- px(_).              /* 找尋任何可使 px() 规则成立的方式 */&lt;br /&gt;
&lt;br /&gt;
px(1) :- \+ px(1).      /* 規定此规则不成立。 i.e. 此规则為假時此规则才為真 （佯謬）*/&lt;br /&gt;
&lt;br /&gt;
:- initialization(q).           /* 啟動q處goal */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== 外部連結 ==&lt;br /&gt;
* [https://web.archive.org/web/20180202221359/http://prolog.longluntan.net/ Prolog 人工智能语言中文论坛]&lt;br /&gt;
&lt;br /&gt;
; 实现&lt;br /&gt;
* [http://www.swi-prolog.org/ SWI-Prolog]{{Wayback|url=http://www.swi-prolog.org/ |date=20131205171324 }}&lt;br /&gt;
* [https://web.archive.org/web/20190321082053/http://www.dcc.fc.up.pt/~vsc/yap/ Yap Prolog]&lt;br /&gt;
&lt;br /&gt;
== 参见 ==&lt;br /&gt;
* [[Visual Prolog]]&lt;br /&gt;
* [[LISP]]&lt;br /&gt;
* [[non-Monotonic Logic]]&lt;br /&gt;
&lt;br /&gt;
{{-}}&lt;br /&gt;
{{程序设计语言|Prolog}}&lt;br /&gt;
{{ISO}}&lt;br /&gt;
&lt;br /&gt;
[[Category:邏輯編程語言]]&lt;br /&gt;
[[Category:同像性编程语言]]&lt;br /&gt;
[[Category:模式匹配编程语言]]&lt;br /&gt;
[[Category:Prolog| ]]&lt;br /&gt;
[[Category:知识表示]]&lt;br /&gt;
[[Category:专家系统]]&lt;br /&gt;
[[Category:人工智能]]&lt;br /&gt;
[[Category:1972年建立的程式語言]]&lt;/div&gt;</summary>
		<author><name>imported&gt;InternetArchiveBot</name></author>
	</entry>
</feed>