- 簽證留學 |
- 筆譯 |
- 口譯
- 求職 |
- 日/韓語 |
- 德語
很多自然語言處理應用程序都是用編程語言PROLOG實現的,或者用建立在PROLOG上的某種擴充來實現。PROLOG被證明是一種有用的工具,它建立在合一和搜索的概念基礎上。這樣,它提供了很多人工智能應用所必需的基本構造單元。
PROLOG建立在霍恩子句(Horn clause)的概念基礎上,霍恩子句可以定義為一個邏輯蘊涵式,蘊涵式的左側是單一的簡單命題。這樣,PROLOG中的表達式:
friendly(fido1) :- dog(fido1) well-fed(fido1)
對應于斷言:Fido是友好的,如果它是一條狗而且它吃飽了。這在一階謂詞演算中表達如下:
(Dog (Fido1 ) & Well-Fed(Fido1))? Friendly( Fido1)
當然,更有用的規(guī)則會使用變量,以便應用于一系列的實體。一個關于“吃飽了的狗是友好的”一般性語句表達如下,其中,變量用一個大寫字母開頭的符號表示:
1. friendly(X) :- dog(X) well-fed(X)
這等價于一階謂詞演算中的斷言Vx(DOG(x)&WELL-FED(x))?FRIENDLY(x)。在PROLOG中,它的解釋是過程性的:對任何實體x,要證明x是友好的,可以證明x是一條狗,而且x吃飽了。
沒有右側的霍恩子句稱為事實。要聲明Fifi是一條狗而且它吃飽了,可以加入以下事實:
2. dog(fifi) :-
3. well-fed(fifi) :-
使用子句1,子句2和子句3,PROLOG現在可以如下證明Fif是友好的:
Goal: Friendly(fifi)
使用合一算法,子句1被具體化以便用于這個目標(也就是說,變量X被綁定到ffi)
4. friendly(fifi) :- dog(fifi) well-fed(fifi)
為了根據這條規(guī)則給出目標的證明,需要證明以下子目標:
5. Goal: dog(fifi)
6. Goal: well-fed(fifi)
由于這些子目標就是子句2和子句3的斷言,其證明是不言而喻的,所以初始的目標得到證明。
一般地,很多不同的規(guī)則可以應用于一個目標。可以逐個嘗試它們,直到有一個成功。作為另外一個例子,考慮以下公理:
所有的魚都生活在海里。
7. live-in-sea(X) :- fish(X)
所有的鱈都是魚。
8. fish(X):-cod(X)
所有的鯖都是魚。
9. fish(X) :- mackerel(X)
鯨生活在海里。
10. live-in-sea(X) :- whale(X)
Homer是一條鱈。
11. mackerel(homer):-
Willie是一頭鯨。
12. whale(willie) :-
給定這些公理,系統(tǒng)可以證明Willie生活在海里,證明中使用的方法稱為回溯搜索。它使用深度優(yōu)先搜索策略來系統(tǒng)地搜索每一種可能的子句應用序列,用以檢查目標是否確立。
圖1顯示了一個典型的PROLOG搜索,根據前面給定的子句,目標是:
live-in-sea(willie)
感覺PROLOG最好的辦法就是運行系統(tǒng),并使用跟蹤工具來精確地觀察它是如何工作的。
PROLOG系統(tǒng)在大多數類型的工作站和個人計算機上都可以得到。
圖1 live-in-sea(willie)的證明
責任編輯:admin