一、prolog簡介


  

一般來說,人工智能語言應具備如下特點: 
1、具有符號處理能力(即非數值處理能力);

2、適合於結構化程序設計,編程容易;

3、 具有遞歸功能和回溯功能;

4、 具有人機交互能力;

5、 適合於推理;

6、既有把過程與說明式數據結構混合起來的能力,又有辨別數據、確定控制的模式匹配機制。

 

人工智能語言解決問題和傳統方法的區別:

  傳統方法通常是把問題的全部只是以各種的模型表達在固定的程序中,問題的求解完全實在程序的指導下按着預先安排好的步驟一步步(逐條)執行。解決思路與馮諾依曼式計算機結構相吻合。

  對於人工智能技術要解決的問題,往往無法把全部知識都固定在程序中,通常要建立一個知識庫(包含事實和推理規則),程序根據環境和所給的輸入信息以及所要解決的問題來決定自己的行動。所以它是在環境模式的指導下的推理過程。這種方式具有極大的靈活性、對話能力、有自我解釋能力和學習能力。這種方法對解決一些條件和目標不大明確或不完備的非結構化問題比傳統方法要好,它通常采用啟發式、試探法策略來解決問題。

二、Prolog語言及其基本結構

盡管Prolog語言有很多版本,但是他們的核心部分都是一樣的。Prolog的基本語句僅有三種:事實規則目標 三種類型的語句,且都用謂詞表示。

Prolog 是陳述性語言,一旦給它提交必要的事實和規則之后,Prolog 就能使用內部的演繹推理機制,自動求解程序給定的目標。而不足要在程序中列出詳細的求解步驟。

  ①、事實(facts)

  事實是prolog中最簡單的謂詞,它和數據庫中的記錄十分相似。事實用來說明一個問題中已知的對象的性質和它們之間的關系。

  事實語法結構如下:

  pred(arg1,arg2...argN).

  其中pred為謂詞名稱,arg1 是參數,共有N個,‘.’是所有prolog子句的結束符。

  沒有參數的謂詞形式如下:pred.

  參數可以是如下四種情況之一:

  1、數(integer) 2、原子(atom,即:小寫字母開頭的字符串)3,變量(variable,大寫字母開頭,或者是 _ ) 4、結構(structure)

  原子:

    a,標識符原子:用小寫字母或者是小寫字母開頭的小寫字母數字串。用途:用於標志對象的名字和謂詞或者是函數名。

    b、字符串原子:用引號括起來的字符串

    c、 特殊原子,一些特殊的符號

   常量由數或者是原子構成

  變量:

    表示暫時不能或者是不需要命名的對象。用大寫字母開頭

    特殊變量   "_" 空變量,表示我們對問題的某一個變量的值不關心。

  結構:

    函子:

    用於構造prolog數據對象,一個結構是一個單一的客體。用於構造數據結構對象。

    它由一個函子和一個或多個稱之為分量的項的序列組成。

    函子(分量1,分量2,.....,分量n)

    其中分量也可以是結構

    person(name(mary),addredd(street(zhongshang),number(20)))

     表:

    表是prolog語言中最常用的數據結構,它由一些有序分量組成。其長度可以任意。有序即表中的分量次序是有意義的。同樣,表的分量可以是原子、結構、表。

    [a,b,c]

    表達式:

    prolog提供各種運算,如算數運算符、比較運算符,可以是中綴形式也可以是函數式(前綴形式)

    X+Y&Z

 

 

 ② 規則:

   規則由幾個互相依賴的簡單句(謂詞)組成。用來描述事實之間的依賴關系,如:因果關系,蘊含關系,對應關系

   形式如下:規則由左邊的表示結論的后件謂詞和右邊表示條件的前提謂詞組成

   例句:bird(X):-animal(X),has(X,feature)

    P:-P1,P2,P3,P4....Pn.

    :- 表示蘊含 個人理解 在邏輯學中充分條件 讀作蘊含,由前件可以推出后件。

    , 表示合取  即 所有條件都為真時,判斷語句為真。

    含義:若P1....Pn 均為真時,P為真。

    horn子句:P1^P2^P3^P4^....Pn ——> P

  規則也可以只有謂詞名而沒有參數。如start.

 ③ 問題(目標)

  把事實和規則寫入Prolog程序之后,就可以想Prolog詢問有關問題的答案,詢問的問題就是程序的運行目標。

  目標的結構可以與事實或者是規則相同,可以使一個簡單的謂詞也可以使多個謂詞的組合。目標分內、外兩種,內部目標寫在程序中,外部目標在程序運行時,由用戶手工輸入。

  例句: ?- student(john)  

      ?- 為prolog軟件提示符, student(john)才是問題(目標)

 

一段代碼(由SWI-Prolog編寫)

test.pl 文件

love(zhangxueyou,wangfei). love(zhangxueyou,zhouhuimin). love(wangfei,xietingfeng). love(zhouhuimin,zhangxueyou). love(xietingfeng,wangfei). love(xietingfeng,zhouhuimin). love(liudehua,zhouhuimin). loves(X,Y):
-love(X,Y),love(Y,X). %戀人 rival_in_love(X,Y):-love(X,Z),not(love(Z,X)),love(Z,Y). %情敵

/*   */多行注釋

%  單行注釋

 

雙擊test.pl文件,程序初始狀態

“  ?-  ”為提示符

輸入一些問題(目標),查看程序運行結果

 

 注意:和規則一樣,問題后面也要加 “.”,同時 “;”為手動輸入,表示繼續查詢。直到出現false。

 

 

 prolog的特點:

1、prolog程序沒有特定的運行順序,其運行順序由電腦決定而不是由編程序的人。

2、prolog沒有if case else 等流程控制語句

3、prolog程序和數據高度統一

4、prolog實際上是一個智能數據庫

5、強大的遞歸功能。

 

參考自:http://blog.csdn.net/mwsong/article/category/331639

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM