Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 31 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
31
Dung lượng
468,44 KB
Nội dung
PrologFastFootPrologFastFoot .
NỘI DUNG
HƯỚNG DẪN 2
ĐẶC ĐIỂM CỦA PROLOG 5
CẤU TRÚC CỦA CHƯƠNG TRÌNH PROLOG 6
DOMAINS 7
PREDICATES 9
CLAUSES 10
GOAL 13
ĐẶC ĐIỂM CỦA BIẾN 14
BẢN CHẤT ĐỆ QUI 15
KIỂU DANH SÁCH 17
NGUYÊN TẮC TRẢ LỜI GOAL 20
CƠ CHẾ HOẠT ĐỘNG CỦA PROLOG 23
LẬP TRÌNH LUẬN LÝ − MÔ TẢ 30
LẬP TRÌNH LUẬN LÝ − ĐỆ QUI 34
TẠP LUẬN 45
LỊCH SỬ 59
TÀI LIỆU THAM KHẢO 62
HƯỚNG DẪN
Thức ăn nhanh giúp người ta nhanh chân hơn trong việc giành lấy cơ
hội. Nhưng cũng rất nguy hiểm - nếu lạm dụng. Hãy thận trọng và ý
thức. Mọi tấm huy chương đều có mặt trái. Nhưng tốt nhất là đừng lật
mặt trái của nó lên.
Hãy nhớ rằng ngôn ngữ là phương tiện, bất kể nó là loại ngôn ngữ nào.
Nội dung truyền đạt quan trọng hơn là cách thức truyền đạt.
Tài liệu này cung cấp một số kiến thức cơ bản, giúp cho người đọc hiểu
được quan điểm lập trình luận lý (logic programming). Cung cách lập
trình này có khác với loại lập trình cấu trúc thường gặp trong các ngôn
ngữ Pascal, C, Fortran, … . Vì vậy việc làm quen với một phong cách
mới cần phải có thời gian. Thời gian để quên cái cũ. Do đó tàiliệu này
cố tránh né việc trình bày dưới góc độ cấu trúc. Tuy nhiên cũng đã có
đôi lúc vì sự cám dỗ của người đọc mà lại sa đà vào. Và cũng hy vọng
rằng, đây cũng như là sự cám dỗ cuối cùng của chúa.
Một bài toán từ khi đặt ra cho đến khi có được lời giải phải thực hiện
một khối lượng công việc là M. Dù bài toán được giải bằng ngôn ngữ
lập trình nào thì khối lượng vẫn là M. Ai sẽ đảm nhiệm khối lượng này
?. Người lập trình đương nhiên sẽ phải đảm nhiệm một phần, phần còn
lại do hệ thống gánh vác. Như vậy người lập trình trong hệ thống phải
biết phần việc nào mình làm và phần việc nào mình không làm. Đây
chính là hành vi cần phải nhận thức. Sự phân chia này sẽ rất khác nhau
ở các ngôn ngữ lập trình. Người lập trình trong hệ thống Prolog luôn là
một ông chủ nhàn hạ vì hệ thống Prolog là một người thích ôm lấy
công việc. Còn lập trình cấu trúc thì không như vậy, hệ thống của các
ngôn ngữ cấu trúc luôn “thụ động”. Nó chỉ làm việc với sự chỉ bảo của
người lập trình.
N.T. Son 1 2 N.T. Son
Vậy người lập trình Prolog sẽ làm gì ?. Họ chỉ cần mô tả bài toán theo
qui định của luận lý (logic). Nghĩa là dùng các câu khai báo để mô tả
PrologFastFootPrologFastFoot .
bài toán. Ngoài ra không cần làm thêm gì cả, hệ thống Prolog sẽ đảm
nhiệm hết phần còn lại.
Phải quên đi một thói quen là một hành vi thường gặp trong các
hoạt động nghiên cứu khoa học. Đây chính là xóa bỏ định kiến.
Học tập ngoài mặt tốt của nó còn có một khía cạnh khác là hình
thành định kiến. Như vậy định kiến là điều không thể tránh khỏi
trong quá trình học tập. Vì vậy hãy chọn lựa phương pháp học tập
sao cho phần định kiến được giảm thiểu. Lập trình luận lý sẽ
phần nào giúp chúng ta giải quyết được bài toán này.
N.T. Son 3 4 N.T. Son
PrologFastFootPrologFastFoot .
ĐẶC ĐIỂM CỦA PROLOG
• Prolog không phân biệt giữa khái niệm Data và Program
như trong Pascal.
• Sức mạnh của Prolog là đệ qui.
• Toàn bộ chương trình được xem như một cơ sở tri thức
(knowledgebase).
• Chương trình Prolog là một tập hợp các luật (rules).
• Prolog là ngôn ngữ được thiết kế chủ yếu cho các suy luận,
không coi trọng tính toán.
• Kowalski nói Algorithm = logic+control.
Logic là phát biểu về cái gì bài toán phải giải quyết.
Control phát biểu về làm thế nào bài toán được giải quyết.
• Người lập trình luận lý chỉ phải thực hiện phần logic còn
phần control hệ thống sẽ đảm nhiệm.
CẤU TRÚC CỦA CHƯƠNG TRÌNH PROLOG
• Domains, Predicates, Clauses, Goal.
• Hệ thống prolog cung cấp sẵn một số tập hợp để người lập
trình sử dụng : Integer, Char, Real, Symbol, String, … .
• Hệ thống prolog cũng cung cấp cho người lập trình khả
năng tạo ra các tập hợp mới phù hợp với bài toán cần giải.
• Domains là nơi để người lập trình định nghĩa những tập
hợp mới (hoặc đặt tên lại).
• Predicates là phần khai báo các quan hệ giữa các domains.
• Clauses là phần định nghĩa các quan hệ đã khai báo trong
phần predicates.
• Clauses gồm các rule. Rule được dùng để biểu diễn cho câu
khai báo có dạng điều kiện - if nguyên_nhân then hậu_quả.
Nếu rule không có nguyên nhân thì được gọi là sự kiện
(fact). Do đó fact là hậu quả tất yếu xảy ra không không
cần một nguyên nhân nào.
• Goal là phần đặt câu hỏi đối với hệ thống.
DOMAINS
• Nơi tạo tập hợp mới có cùng kiểu với tập hợp có sẵn.
Thí dụ :
Domains
Tên = symbol
Tuổi = integer
NghềNghiệp = symbol
Chú thích :
1. Một số kiểu (tập hợp) cơ bản :
integer : kiểu số nguyên,
N.T. Son 5 6 N.T. Son
PrologFastFootPrologFastFoot .
real : kiểu số thực,
char : kiểu ký tự,
string : kiểu chuỗi, gồm chuỗi các ký tự có chiều dài
‘tuỳ ý’ được đặt giữa hai dấu nháy.
symbol : là kiểu gồm những ký hiệu, mỗi ký hiệu có
chiều dài tối đa 255 ký tự, bắt đầu bằng ký tự
thường.
2. Dù miền Tên và miền NghềNghiệp có cùng kiểu symbol
nhưng chúng không so sánh hoặc đồng nhất được với
nhau. Nói chung là các tập hợp trong Domains nếu
không cùng tên thì sẽ không tương thích với nhau.
• Tạo tập hợp là tích các tập hợp.
Thí dụ :
Domains
Ấnphẩm = Tạpchí(symbol, symbol)
TiểuSử = LýLịch(symbol, integer, symbol, symbol)
• Tạo tập hợp là hội các tập hợp.
Thí dụ :
Domains
Tên = symbol
Tàiliệu = Book(Tên,Tên) or Magazine(Tên,Tên)
Dấu = âm ; dương ; Kýsố(integer)
Hội hai tập hợp bằng ký hiệu OR hoặc CHẤM PHẨY.
Tập hợp thành phần của hội có thể là tập hợp có một phần
tử. Thí dụ âm, dương là hai tập hợp có một phần tử.
N.T. Son 7 8 N.T. Son
PrologFastFootPrologFastFoot .
PREDICATES
• Tạo quan hệ giữa các tập hợp.
Thí dụ :
Domains
Tên = symbol
Nghềnghiệp = string
Tuổi = integer
Predicates
Lýlịch(Tên, Tuổi, Nghềnghiệp)
• Tạo quan hệ trống.
Thí dụ :
Predicates
Repeat()
Khôngmàu
Repeat và Khôngmàu là tên của hai quan hệ. Tập hợp mà
nó quan hệ là tập trống. Quan hệ Repeat() còn có thể viết là
Repeat. Quan hệ Khôngmàu có thể viết là Khôngmàu().
CLAUSES
• Biến và hằng
Turbo Prolog qui định biến có ký tự bắt đầu là ký tự in
(upppercase) hoặc ký tự gạch dưới (underscore). Hằng có ký
tự bắt đầu là ký tự thường (lowercase).
Thí dụ :
Minh, X, Người, _minh, _x, _người … là 6 biến.
minh, x, người, … là 3 hằng.
• Fact
Fact là một quan hệ trên các tập hợp đã xác định (có sẵn
hoặc đã được xác định trong Domains).
Đây là cách xác định tập hợp bằng liệt kê.
Thí dụ :
Predicates
Chơi(symbol, symbol)
Biết(symbol, symbol)
Clauses
Chơi(sơ, piano). Chơi(kính, violon).
Chơi(tân, keyboard). Chơi(trang, guitare).
Chơi(sơ, guitare). Chơi(kính, piano).
Biết(sơ, vẽtranh). Biết(kính, làmthơ).
Biết(kính, điêukhắc). Biết(kính, soạnnhạc).
• Rule
Rule là quan hệ được định nghĩa từ nhiều quan hệ khác.
Đây là cách xác định tập hợp bằng phương pháp trưng tính.
N.T. Son 9 10 N.T. Son
PrologFastFootPrologFastFoot .
Rule có dạng của câu điều kiện, nghĩa là gồm nguyên nhân
và hậu quả (nguyên nhân → hậu quả). Tuy nhiên Rule là
câu điều kiện được trình bày theo dạng thức : Hậu quả
← nguyên nhân.
Các dạng sau đây tương đương :
Hậu quả ← Nguyên nhân hay
Hậu quả if Nguyên nhân hay
Hậu quả :- Nguyên nhân.
Do đó Fact có thể được xem là một loại rule đặc biệt - rule
không có điều kiện.
Nếu mệnh đề nguyên nhân gồm 3 mệnh đề nguyên nhân
ngnh1, ngnh2 và ngnh3 kết hợp lại thì được biểu diễn như
sau :
Nguyên nhân = Ngnh1 and Ngnh2 and Ngnh3.
Hoặc
Nguyên nhân = Ngnh1, Ngnh2, Ngnh3.
Thí dụ :
Predicates
Chơi(symbol, symbol) /* định nghĩa ở trên */
Biết(symbol, symbol) /* định nghĩa ở trên */
Đanăng(symbol)
Clauses
Đanăng(X) :- Biết(X, Y), Chơi(X, Z).
Một học sinh X đa năng nếu biết ít nhất một môn nghệ
thuật Y và chơi được một môn thể thao Z.
Thí dụ :
Chuyển đổi tam đoạn luận sang Prolog :
Mọi người đều phải chết.
Socrates là người.
Vậy Socrates phải chết.
Predicates
Làngười(symbol)
Chết(symbol)
Clauses
Làngười(socrates).
Chết(Ai) :- Làngười(Ai).
Nhận xét :
Một predicates được định nghĩa trong clauses bằng nhiều fact
hoặc nhiều rule hoặc kết hợp vừa fact vừa rule.
Thí dụ :
Xác định tập hợp A = {1,2,3,4,5,6,8,10,12,14, … }
Predicates
PtửA(integer)
Clauses
N.T. Son 11 12 N.T. Son
PtửA(1).
PrologFastFootPrologFastFoot .
PtửA(3).
PtửA(5).
PtửA(X) :- (X mod 2) = 0.
Vị từ PtửA được định nghĩa gồm 3 fact và 1 rule.
GOAL
• Goal là nơi đặt câu hỏi với hệ thống và hệ thống sẽ cho câu
trả lời.
• Goal gồm một hay nhiều predicates cùng với thông số. Nếu
goal gồm nhiều thành phần thì mỗi thành phần được gọi là
subgoal.
Thí dụ :
Cho hệ thống tam đoạn luận như thí dụ ở trên. Khi đó có
thể đặt 1 trong 5 câu hỏi sau :
Goal Chết(Ai).
Goal Chết(socates).
Goal Làngười(Ai).
Goal Làngười(socrates).
Goal Chết(Ai), Làngười(socrates).
Bốn Goal đầu có 1 subgoal. Nhưng goal cuối có 2 subgoal
là Chết(Ai) và Làngười(socrates).
ĐẶC ĐIỂM CỦA BIẾN TRONG TURBO PROLOG
• Biến trong mỗi clauses phải xuất hiện ít nhất 2 lần.
• Nếu biến chỉ xuất hiện một lần trong clauses thì phải thay
nó bằng biến rỗng (anonymous). Ngoài ra một thông số
nào của vị từ trong clauses mà ta không quan tâm cũng có
thể thay nó bằng biến rỗng.
• Biến rỗng được biểu diễn bằng ký hiệu gạch dưới _
(underscore).
Thí dụ :
Clauses
Đanăng(X) :- Biết(X, Y), Chơi(X, Z).
Biến Y và Z chỉ xuất hiện 1 lần nên phải đổi thành biến
rỗng. Do đó :
Clauses
Đanăng(X) :- Biết(X, _ ), Chơi(X, _ ).
• Các trạng thái của biến là : tự do (free), bị trói (bound),
được cởi (unbound). Các trạng thái này do hệ thống thực
hiện. Người lập trình không có bất kỳ tác động nào lên biến
để thay đổi trạng thái. Do đó Prolog không có hành động
gán (assignment) giá trị cho biến như trong ngôn ngữ
Pascal.
N.T. Son 13 14 N.T. Son
PrologFastFootPrologFastFoot .
BẢN CHẤT ĐỆ QUI
Vì Prolog không phân biệt giữa dữ liệu và chương trình như
Pascal nên vấn đề đệ qui được thực hiện cả trong domains và
clauses.
Nền tảng toán học của đệ qui là định lý truy chứng. Việc áp
dụng đệ qui trong Prolog sử dụng cả 2 dạng truy chứng.
Dạng 1 :
P
1
.
P
n
→ P
n+1
.
Dạng 2 :
P
1
.
P
m
→ P
n+1
, với m ∈ [1, n].
Trong thực tế mệnh đề P
1
của truy chứng tương ứng với một
tập hợp các mệnh đề sự kiện (fact).
Mệnh đề P
n
→ P
n+1
cũng tương ứng với một tập hợp các mệnh
đề qui luật (rule).
• Đệ qui trong khai báo Domains
Thí dụ :
Domains
Cây = Tree(symbol, Cây); Trống
Miền Cây là hội của hai tập hợp. Tập hợp thứ nhất chỉ có
một phần tử là Trống và tập hợp thứ hai là tập hợp đệ qui
Tree(symbol, Cây).
• Đệ qui trong phần clauses
Thí dụ :
Tính giai thừa của một số nguyên.
Giai thừa của 5 là 5 ! = 1×2×3×4×5. Như vậy để tính giai
thừa của 5 thì tính giai thừa của 4 (=5–1). Sau đó lấy kết
quả nhân với 5.
Vậy 5 ! = 4! × 5.
Predicates
Giaithừa (real, real)
Clauses
Giaithừa(1,1).
Giaithừa(N,T) :- M=N–1, Giaithừa(M,S), T=S*N.
Tập hợp thứ nhất gồm một mệnh đề sự kiện là
Giaithừa(1,1) và tập hợp một mệnh đề đệ qui là
Giaithừa(N,T) :- M=N –1, Giaithừa(M, S), T = S*N.
N.T. Son 15 16 N.T. Son
PrologFastFootPrologFastFoot .
KIỂU DANH SÁCH
Đây là một loại tập hợp có bản chất đệ qui. Do đó những thao
tác trên danh sách cần khai thác tính đệ qui triệt để.
• Danh sách là một loại tập hợp có phần tử là chuỗi các phần
tử của một tập hợp trong miền Domains.
• Kiểu danh sách của Prolog được định nghĩa bằng cách thêm
ký tự * vào tên kiểu phần tử.
Thí dụ :
Domains
Họtên = symbol
DsSV = Họtên*
DsSố = integer*
DsTên = symbol*
DsNghềnghiệp = string*
DsSV là danh sách các phần tử mà mỗi phần tử có kiểu
Hotên.
DsSố là danh sách các phần tử mà mỗi phần tử là số
nguyên.
• Dạng thức của một biến kiểu danh sách :
− Liệt kê : các phần tử của danh sách đặt cách nhau
bằng dấu phẩy. Tất cả đặt ở giữa 2 dấu móc vuông.
Thí dụ :
Domains
Dssố = integer*
Biến X có kiểu Dssố là một danh sách 4 số nguyên
1, 2, 3, 4, được viết như sau :
X = [1,2,3,4]
− Đệ qui : Danh sách được biểu diễn gồm 2 phần, phần
Head gồm 1 phần tử đầu của biểu diễn liệt kê và phần
Tail gồm những phần tử còn lại của biểu diễn liệt kê.
Phần Tail được biểu diễn bằng một danh sách liệt kê
khác. Head và Tail đặt cách nhau dấu sổ xuống. Head
và Tail được đặt trong dấu móc vuông.
Thí dụ :
Domains
Dssố = integer*
Biến X có kiểu Dssố là một danh sách 4 số nguyên
1, 2, 3, 4, được viết như sau :
X = [1|[2,3,4]].
− Một số danh sách đặc biệt :
a. Danh sách trống [] có head và tail không được
định nghĩa.
b. Danh sách [1,2,3,4] = [1|[2,3,4]] có head là 1,
tail là [2,3,4].
c. Danh sách [1] = [1|[] ] có head là 1, tail là danh
sách trống [].
N.T. Son 17 18 N.T. Son
PrologFastFootPrologFastFoot .
d. Danh sách [[1,2,3], [2,3,4,5], [6]] =
[[1,2,3]|[[2,3,4,5], [6]]] có head là [1,2,3] và tail
là [[2,3,4,5],[6]].
NGUYÊN TẮC TRẢ LỜI GOAL CỦA PROLOG
• Tuần tự từ trên xuống : hệ thống sẽ trả lời cho subgoal
đầu tiên, kế đến là subgoal thứ 2, thứ 3, … cho đến
subgoal cuối cùng.
N.T. Son 19 20 N.T. Son
• So trùng (matching) : để trả lời cho từng subgoal hệ thống
dò subgoal tuần tự theo từng dòng trong clauses. Việc dò
tìm sẽ dừng khi subgoal trùng với một dòng clause nào đó,
nếu không trùng thì dò tiếp cho đến dòng cuối cùng của
clauses.
Thí dụ : Tháp Hà Nội.
Đừng cố tìm hiểu ý nghĩa của chương trình này, chỉ cần
quan sát hình thức của nó.
Các ký hiệu ! và nl là các subgoal.
Domains
Cột = symbol
Predicates
Hanoi
Hanoi(integer)
Dời(integer, Cột, Cột, Cột)
Msg(Cột, Cột)
Clauses
Hanoi :- Hanoi(5). (1)
Hanoi(N) :- Dời(N, trái, giữa, phải). (2)
Dời(1, A, _, C) :- Msg(A, C), !. (3)
Dời(N, A, B, C) :- (4)
M = N-1,
Dời(M, A, C, B),
Msg(A, C), !,
Dời(M, B, A, C).
Msg(Loc1, Loc2) :- (5)
write("Dời đĩa từ ", Loc1, " vào", Loc2), nl, !.
Goal
Hanoi.
Mô tả cấu trúc chương trình :
1. Sử dụng 2 miền : Cột và integer.
2. Khai báo 4 vị từ :
vị từ Hànội không có thông số,
vị từ Hànội có 1 thông số,
vị từ Dời có 4 thông số,
vị từ Msg có 2 thông số.
3. Phần định nghĩa của các vị từ trong clauses :
vị từ Hànội có 1 mệnh đề,
vị từ Hànội(_) có 1 mệnh đề,
[...]... | Z], E, Y) :- Reverse3(Z, [X|E], Y) d Sublist(X, PXS) :- Append(PX, _ , PXS), Append(_ , X, PX) N.T Son 39 40 N.T Son PrologFastFootPrologFastFoot Chú thích : Tạo một vị từ trung gian Reverse3 có thêm một thông số trung gian N.T Son 41 42 N.T Son PrologFastFootPrologFastFoot Ta có ý định nghĩa Append với dạng (in, in, out) nhưng các TẠP LUẬN • Trật tự của các rule trong phần clauses sẽ... N.T Son PrologFastFoot Dạng Clausal form : A1 ∨ … ∨ An ← B1 ∧ … ∧ Bm PrologFastFoot 8 Turbo Prolog Reference guide V.2.0 ? Borland 9 Nguyễn Thanh Sơn Luận lý toán học 1996 NXB KHKT Thí dụ : Đàn_ông(X) ∨ Đàn_Bà(X) ← Người(X) 10 Nguyễn Thanh Sơn Lý thuyết tập hợp 1999 NXB KHKT Horn clause là dạng Clausal form với 0 ≤ n ≤ 1 Mathematical Logic First Order Logic PROLOGFASTFOOT Clausal Form TÀI LIỆU... X là phần tử của L[n] thì X là phần tử của L[n] Về việc nhận dạng các câu khai báo có thể đọc thêm ở tài liệu thêm phần tử A ở đầu tham khảo [9] Về các kỹ thuật chuyển một câu sang dạng truy chứng có thể xem phụ chương 4 của tài liệu tham khảo [10] N.T Son 31 32 N.T Son PrologFastFootPrologFastFoot = Nếu X là phần tử của L[n] thì X là phần tử của b Pn = X[n] là prefix của L [A|L[n]] c X[0] =... Prolog programming for artificial intelligence 1990 AddisonWesley Publishing 6 Deyi Li A prolog database 1984 John Wiley & Sons 7 Keith Weiskamp, Terry Hengl Artificial intelligence programming with turbo prolog 1988 John Wiley &Sons, Inc N.T Son 57 58 N.T Son PrologFastFootPrologFastFoot FFLIB’s 1999 Tủ sách FAST- FOOT : Chủ biên Nguyễn Thanh Sơn Mọi liên hệ xin theo các địa chỉ sau : Nguyễn Thanh... Repeat :- Repeat Chọn Nhập_kýtự :- Clauses Repeat Côngviệc(1) :- write(“Nhập số liệu ) Côngviệc(2) :- write(“Hiệu chỉnh số liệu ) Côngviệc(3) :- write(“Thoát”) Write(X), Côngviệc(_) :- Chọn N.T Son Readchar(X), Char_int(X,13) 53 54 N.T Son PrologFastFootPrologFastFoot LỊCH SỬ [1] số ý tưởng sau này được sử dụng trong Prolog 1969 C 1 Logic được phát sinh ở Hylạp trước Thiên Chúa giáng sinh Green... các địa chỉ sau : Nguyễn Thanh Sơn, Cử nhân giáo khoa Toán Giảng viên Khoa CNTT Email : ntson@dit.hcmut.edu.vn Tel : 8658689 Khoa CNTT Đại Học Kỹ Thuật N.T Son 59 60 N.T Son PrologFastFootPrologFastFoot N T SON PROLOGFASTFOOT FFLIB’s 1999 N.T Son 61 62 N.T Son .. .Prolog FastFootPrologFastFoot vị từ Dời(_,_,_,_) có 2 mệnh đề, vị từ Msg(_,_) có 1 mệnh đề CƠ CHẾ HOẠT ĐỘNG CỦA PROLOG • Đồng nhất (unification) Khi so trùng subgoal với các Để thỏa mãn Goal Hanoi, hệ thống sẽ dò tuần tự từ mệnh đề đầu tiên đến mệnh đề thứ 5 trong phần clauses dòng của clauses hệ thống prolog áp dụng cơ chế đồng Goal Hanoi trùng với... subgoal diên tả điều kiện Nhận xét : có trong mệnh đề đó Sự khác biệt giữa rule của Prolog và if … then của Pascal Thí dụ : If Điềukiện then Kếtquả = lệnh điều kiện của Pascal N.T Son 23 24 N.T Son PrologFastFootPrologFastFoot − Bị trói (bound) : Khi biến được đồng nhất thì nó bị Kếtquả if Điềukiện = Rule của Prolog Hệ thống Pascal khi thực hiện lệnh if-then sẽ kiểm tra điều buộc giá trị được... thực hiện được nhờ cơ Đanăng(X) chế thối lui của Prolog Để goal thỏa thì 2 subgoal Biết(X,_) và Chơi(X,_) phải • Các trạng thái của biến thỏa − Tự do (free) : Trước khi bị buộc thì biến được gọi là tự do N.T Son 25 26 N.T Son PrologFastFootPrologFastFoot Subgoal Biết(X, _ ) sẽ được duyệt trên clauses và sẽ lấy bất lợi hơn là thuận lợi Lập trình prolog có thể hình dung giá trị là Biết(tân, vẽtranh)... X) Do đó điều kiện của mệnh đề 3 Msg(A, C) cũng Prolog sẽ trả lời bằng cách dò trên 3 mệnh đề của phải được thỏa phần clauses Quá trình này diễn tiến cho đến khi không còn điều Với mệnh đề 1 Chếtạo(minh, tênlửa) : kiện nào đòi hỏi thì hệ thống dừng tên vị từ phù hợp cùng là Chếtạo, cùng có 2 thông số, N.T Son 21 22 N.T Son PrologFastFootPrologFastFoot nhưng thông số thứ 1 của goal là thư khác với .
Prolog Fast Foot Prolog Fast Foot .
ĐẶC ĐIỂM CỦA PROLOG
• Prolog không phân biệt giữa khái niệm Data và Program
như trong Pascal.
• Sức mạnh của Prolog. Prolog Fast Foot Prolog Fast Foot .
NỘI DUNG
HƯỚNG DẪN 2
ĐẶC ĐIỂM CỦA PROLOG 5
CẤU TRÚC CỦA CHƯƠNG TRÌNH PROLOG 6
DOMAINS 7