PGS.TS. PHAN HUY KHÁNH<br />
<br />
Lập t rình Lô g ích<br />
trong Prolog<br />
<br />
NHÀ XUẤT BẢN ĐẠI HỌC QUỐC GIA HÀ NỘI<br />
2004<br />
<br />
PGS.TS. PHAN HUY KHÁNH<br />
<br />
L ậ p tr ìn h<br />
L ôg í ch<br />
t r ong Pr ol og<br />
Prolog là ngôn ngữ lập trình lôgich (Prolog = PROgramming in LOGic) do<br />
GS. A. Colmerauer đưa ra lần đầu tiên năm 1972 tại trường Đại học Marseille,<br />
nước Pháp. Đến năm 1980, Prolog nhanh chóng được áp dụng rộng rãi, được<br />
người Nhật chọn làm ngôn ngữ phát triển máy tính thế hệ 5. Prolog đã được cài<br />
đặt trên hầu hết các dòng máy tính Unix/Linux, Macintosh, Windows.<br />
Prolog còn được gọi là ngôn ngữ lập trình ký hiệu (symbolic programming) tương<br />
tự lập trình hàm (functional programming), hay lập trình phi số (non-numerical<br />
programming). Nguyên lý lập trình lôgich dựa trên phép suy diễn lôgích, liên<br />
quan đến những khái niệm toán học như phép hợp nhất Herbrand, hợp giải<br />
Robinson, lôgich Horn, lôgich vị từ bậc một (first order predicate logic), v.v...<br />
Prolog rất thích hợp để giải quyết những bài toán liên quan đến các đối tượng và<br />
mối quan hệ giữa chúng. Prolog được ứng dụng chủ yếu trong lĩnh vực trí tuệ nhân<br />
tạo (Artificial Intelligence) như công nghệ xử lý tri thức, hệ chuyên gia, máy<br />
học, xử lý ngôn ngữ, trò chơi, v.v...<br />
Nội dung cuốn sách tập trung trình bày cơ sở lý thuyết và những kỹ thuật<br />
lập trình cơ bản trong Prolog, rất thích hợp cho sinh viên các ngành tin học và<br />
những bạn đọc muốn tìm hiểu về kỹ thuật lập trình ứng dụng trong lĩnh vực trí<br />
tuệ nhân tạo.<br />
VỀ TÁC GIẢ :<br />
Tốt nghiệp ngành Toán Máy tính năm 1979 tại trường Đại học Bách khoa Hà Nội.<br />
Từ 1979 đến nay giảng dạy tại khoa Công nghệ Thông tin, trường Đại học Bách<br />
khoa, Đại học Đà Nẵng. Bảo vệ tiến sĩ năm 1991 tại Pháp. Giữ chức chủ nhiệm<br />
khoa<br />
Công nghệ Thông tin 1995-2000.<br />
Hướng nghiên cứu chính : xử lý ngôn ngữ, xử lý đa ngữ, lý thuyết tính toán.<br />
E-mail: khanhph@vnn.vn<br />
<br />
3<br />
<br />
LỜI NÓI ĐẦU<br />
Cuốn sách này nhằm cung cấp cơ sở lý thuyết và những phương pháp lập trình<br />
cơ bản nhất của môn học «Lập trình lôgich» (Programming in Logic). Người đọc sẽ<br />
được làm quen với một số kỹ thuật lập trình lôgich được ứng dụng tương đối<br />
phổ biến và chủ yếu trong lĩnh vực trí tuệ nhân tạo (Artificial Intelligence) như công<br />
nghệ xử lý tri thức, máy học, hệ chuyên gia, xử lý ngôn ngữ tự nhiên, trò chơi, v.v...<br />
Cuốn sách gồm năm chương, trong mỗi chương, tác giả đều cố gắng đưa vào<br />
nhiều ví dụ minh họa. Nội dung các chương như sau :<br />
− Chương 1 giới thiệu ngôn ngữ lập trình Prolog dựa trên lôgich Horn (Horn<br />
logic). Người đọc được làm quen với các kiểu dữ liệu của Prolog, khái niệm<br />
luật, sự kiện và viết được các chương trình Prolog đơn giản.<br />
− Chương 2 trình bày các mức nghĩa khác nhau của một chương trình Prolog :<br />
nghĩa lôgich, nghĩa khai báo và nghĩa thủ tục, cách Prolog trả lời các câu<br />
hỏi, cách Prolog làm thoả mãn các đích.<br />
− Chương 3 trình bày các phép toán số học, phép so sánh các đối tượng và<br />
định nghĩa các hàm sử dụng phép đệ quy trong Prolog.<br />
− Chương 4 trình bày cấu trúc danh sách và các phép xử lý cơ bản trên danh<br />
sách của Prolog.<br />
− Chương 5 trình bày kỹ thuật lập trình nâng cao với Prolog.<br />
− Phần phụ lục giới thiệu ngôn ngữ lập trình SWI-Prolog, hướng dẫn cách cài<br />
đặt sử dụng phần mềm này và một số chương trình ví dụ tiêu biểu viết trong<br />
SWI Prolog đã chạy có kết quả.<br />
Cuốn sách này dùng làm giáo trình cho sinh viên ngành Tin học và những bạn<br />
đọc muốn tìm hiểu thêm về kỹ thuật lập trình cho lĩnh vực trí tuệ nhân tạo.<br />
Trong quá trình biên soạn, tác giả đã nhận được từ các bạn đồng nghiệp nhiều<br />
đóng góp bổ ích về mặt chuyên môn, những động viên khích lệ về mặt tinh thần, sự<br />
giúp đỡ về biên tập để cuốn sách được ra đời. Tác giả xin được bày tỏ lòng biết ơn<br />
sâu sắc. Tác giả cũng chân thành cảm ơn mọi ý kiến phê bình đóng góp của bạn đọc<br />
gần xa về nội dung của cuốn sách này.<br />
Đà Nẵng, ngày 27/05/2004<br />
Tác giả.<br />
<br />
MỤC LỤC<br />
CHƯƠNG 1 MỞ ĐẦU VỀ NGÔN NGỮ PROLOG.................................. 1<br />
I.<br />
GIỚI THIỆU NGÔN NGỮ PROLOG.......................................... 1<br />
I.1.<br />
Prolog là ngôn ngữ lập trình lôgich .............................................. 1<br />
I.2.<br />
Cú pháp Prolog ............................................................................ 2<br />
I.2.1. Các thuật ngữ .............................................................................. 2<br />
I.2.2. Các kiểu dữ liệu Prolog ............................................................... 3<br />
I.2.3. Chú thích ..................................................................................... 4<br />
II.<br />
CÁC KIỂU DỮ LIỆU SƠ CẤP CỦA PROLOG.......................... 5<br />
II.1.<br />
Các kiểu hằng (trực kiện) ............................................................. 5<br />
II.1.1. Kiểu hằng số ................................................................................ 5<br />
II.1.2. Kiểu hằng lôgich.......................................................................... 5<br />
II.1.3. Kiểu hằng chuỗi ký tự .................................................................. 5<br />
II.1.4. Kiểu hằng nguyên tử .................................................................... 5<br />
II.2.<br />
Biến ............................................................................................. 6<br />
III.<br />
SỰ KIỆN VÀ LUẬT TRONG PROLOG..................................... 6<br />
III.1.<br />
Xây dựng sự kiện ......................................................................... 6<br />
III.2.<br />
Xây dựng luật ............................................................................ 10<br />
III.2.1. Định nghĩa luật .......................................................................... 10<br />
III.2.2. Định nghĩa luật đệ quy............................................................... 16<br />
III.2.3. Sử dụng biến trong Prolog ......................................................... 18<br />
IV.<br />
KIỂU DỮ LIỆU CẤU TRÚC CỦA PROLOG........................... 20<br />
IV.1.<br />
Định nghĩa kiểu cấu trúc của Prolog........................................... 20<br />
IV.2.<br />
So sánh và hợp nhất các hạng..................................................... 23<br />
CHƯƠNG 3<br />
I.<br />
II.<br />
II.1.<br />
II.2.<br />
II.3.<br />
II.4.<br />
II.5.<br />
<br />
NGỮ NGHĨA CỦA CHƯƠNG TRÌNH PROLOG ................ 31<br />
QUAN HỆ GIỮA PROLOG VÀ LÔGICH TOÁN HỌC ........... 31<br />
CÁC MỨC NGHĨA CỦA CHƯƠNG TRÌNH PROLOG ........... 32<br />
Nghĩa khai báo của chương trình Prolog .................................... 33<br />
Khái niệm về gói mệnh đề.......................................................... 34<br />
Nghĩa lôgich của các mệnh đề.................................................... 35<br />
Nghĩa thủ tục của Prolog............................................................ 37<br />
Tổ hợp các yếu tố khai báo và thủ tục ........................................ 47<br />
i<br />
<br />