- Prolog 教程
- Prolog - 首頁
- Prolog - 簡介
- Prolog - 環境設定
- Prolog - Hello World
- Prolog - 基礎知識
- Prolog - 關係
- Prolog - 資料物件
- Prolog - 運算子
- 迴圈與決策
- 連線詞與析取詞
- Prolog - 列表
- 遞迴和結構
- Prolog - 回溯
- Prolog - 不同和非
- Prolog - 輸入和輸出
- Prolog - 內建謂詞
- 樹形資料結構(案例研究)
- Prolog - 示例
- Prolog - 基本程式
- Prolog - 切割示例
- 漢諾塔問題
- Prolog - 連結串列
- 猴子與香蕉問題
- Prolog 有用資源
- Prolog - 快速指南
- Prolog - 有用資源
- Prolog - 討論
Prolog - 簡介
Prolog,顧名思義,是LOGical PROgramming的縮寫。它是一種邏輯型和宣告式程式語言。在深入研究Prolog的概念之前,讓我們首先了解什麼是邏輯程式設計。
邏輯程式設計是計算機程式設計正規化中的一種,其中程式語句表達了系統中不同問題的事實和規則,這些規則以形式邏輯的形式表達。在這裡,規則以邏輯子句的形式編寫,其中包含頭部和主體。例如,H是頭部,B1、B2、B3是主體的元素。現在,如果我們說“當B1、B2、B3都為真時,H為真”,這就是一條規則。另一方面,事實類似於規則,但沒有主體。因此,事實的一個例子是“H為真”。
一些邏輯程式語言,如Datalog或ASP(Answer Set Programming),被稱為純宣告式語言。這些語言允許宣告程式應該完成什麼。沒有關於如何執行任務的逐步說明。但是,其他語言,如Prolog,既具有宣告性也具有命令性。這可能還包括過程語句,例如“要解決問題H,執行B1、B2和B3”。
下面給出了一些邏輯程式語言:
ALF(代數邏輯函數語言程式設計語言)。
ASP(Answer Set Programming)
CycL
Datalog
FuzzyCLIPS
Janus
Parlog
Prolog
Prolog++
ROOP
邏輯和函數語言程式設計
我們將討論邏輯程式設計和傳統的函數語言程式設計語言之間的區別。我們可以使用下圖來說明這兩者:
從這個圖中,我們可以看出,在函數語言程式設計中,我們必須定義過程以及過程的工作方式。這些過程一步一步地解決基於演算法的特定問題。另一方面,對於邏輯程式設計,我們將提供知識庫。使用這個知識庫,機器可以找到給定問題的答案,這與函數語言程式設計完全不同。
在函數語言程式設計中,我們必須說明如何解決一個問題,但在邏輯程式設計中,我們必須指定我們實際想要解決的問題。然後邏輯程式設計會自動找到一個合適的解決方案來幫助我們解決那個特定問題。
現在讓我們看看下面的一些區別:
| 函數語言程式設計 | 邏輯程式設計 |
|---|---|
| 函數語言程式設計遵循馮·諾依曼架構,或使用順序步驟。 | 邏輯程式設計使用抽象模型,或處理物件及其關係。 |
| 語法實際上是語句的序列,如(a,s,I)。 | 語法基本上是邏輯公式(Horn子句)。 |
| 計算透過順序執行語句來進行。 | 它透過演繹子句來計算。 |
| 邏輯和控制混合在一起。 | 邏輯和控制可以分離。 |
什麼是Prolog?
Prolog或PROgramming in LOGics是一種邏輯型和宣告式程式語言。它是第四代語言的主要示例之一,支援宣告式程式設計正規化。這尤其適用於涉及符號或非數值計算的程式。這是使用Prolog作為人工智慧程式語言的主要原因,其中符號操作和推理操作是基本任務。
在Prolog中,我們不需要說明如何解決一個問題,我們只需要說明問題是什麼,以便Prolog自動解決它。但是,在Prolog中,我們應該給出作為解決方案方法的線索。
Prolog語言基本上有三個不同的元素:
事實 - 事實是為真的謂詞,例如,如果我們說“Tom是Jack的兒子”,那麼這是一個事實。
規則 - 規則是包含條件子句的事實的擴充套件。要滿足規則,必須滿足這些條件。例如,如果我們定義一個規則如下:
grandfather(X, Y) :- father(X, Z), parent(Z, Y)
這意味著,對於X成為Y的祖父,Z必須是Y的父母,而X必須是Z的父親。
問題 - 並且要執行一個Prolog程式,我們需要一些問題,這些問題可以透過給定的事實和規則來回答。
Prolog的歷史
Prolog的淵源包括對定理證明器和其他一些在20世紀60年代和70年代開發的自動化演繹系統的研究。Prolog的推理機制基於羅賓遜在1965年提出的解析度原理,以及格林(1968年)提出的答案提取機制。這些想法隨著線性解析度程式的出現而強有力地結合在一起。
明確的目標導向線性解析度程式推動了通用邏輯程式設計系統的開發。第一個Prolog是馬賽Prolog,它基於Colmerauer在1970年的工作。這個馬賽Prolog直譯器的手冊(Roussel,1975)是對Prolog語言的第一個詳細描述。
Prolog也被認為是一種支援宣告式程式設計正規化的第四代程式語言。著名的日本第五代計算機專案於1981年宣佈,採用Prolog作為開發語言,從而引起了人們對該語言及其能力的廣泛關注。
Prolog的一些應用
Prolog用於各個領域。它在自動化系統中發揮著至關重要的作用。以下是Prolog的其他一些重要應用領域:
智慧資料庫檢索
自然語言理解
規範語言
機器學習
機器人規劃
自動化系統
問題解決