Prolog là một ngôn ngữ lập trình. Mục tiêu của Prolog là giúp người dùng mô tả lại bài toán trên ngôn ngữ của logic, dựa trên đó, máy tính sẽ tiến hành suy diễn tự động dựa vào những cơ chế suy diễn có sẵn để tìm câu trả lời cho người dùng.
Trang 1TÌM HIỂU VỀ MÔ HÌNH SWI
PROLOG TRONG LẬP TRÌNH LOGIC
Trang 2MỤC LỤC
A Nội dung tiểu luận: 3
1.Giới thiệu về SWI Prolog 3
2 Sử dụng SWI Prolog 3
2.1 Bắt đầu Prolog và tải một chương trình 3
2.2 Đang thực hiện truy vấn 5
2.3 Lệnh trình đơn 5
2.4 Chỉnh sửa các chương trình Prolog 7
2.5 Một số lệnh hữu ích 7
3.Các quy ước trong SWI Prolog 9
4 Cài đặt 10
4.1 Các phiên bản Windows được hỗ trợ 10
4.2 Chọn phần mở rộng tệp tin 10
4.3 Các chương trình cài đặt 10
4.4 Các phím và trình đơn đã được cài đặt 13
4.5 Cấp độ thực hiện 14
4.6 Tạo mục trình đơn trên màn hình 14
5.Một số ví dụ 14
5.Kết luận 18
Tài liệu tham khảo 18
B Phân công thực hiện: 19
Trang 3A Nội dung tiểu luận:
1.Giới thiệu về SWI Prolog
Prolog là một ngôn ngữ lập trình Tên gọi Prolog được xuất phát từ cụm từ tiếng Pháp Programmation en logique, nghĩa là "lập trình theo lô gích" Xuất hiện từ năm 1972 (do Alain Colmerauer và Robert Kowalski thiết kế), mục tiêu của Prolog là giúp người dùng mô tả lại bài toán trên ngôn ngữ của logic, dựa trên đó, máy tính sẽ tiến hành suy diễn tự động dựa vào những cơ chế suy diễn có sẵn (hợp nhất, quay lui và tìm kiếm theo chiều sâu) để tìm câu trả lời cho người dùng
Prolog được sử dụng nhiều trong các ứng dụng của trí tuệ nhân tạo và ngôn ngữ học trong khoa học máy tính (đặc biệt là trong ngành xử lý ngôn ngữ tự nhiên vì đây là mục tiêu thiết kế ban đầu của nó) Cú pháp và ngữ nghĩa của Prolog đơn giản và sáng sủa, nó được người Nhật coi là một trong những nền tảng
để xây dựng máy tính thế hệ thứ năm mà ở đó, thay vì phải mô
tả cách giải quyết một bài toán trên máy tính, con người chỉ cần
mô tả bài toán và máy tính sẽ hỗ trợ họ nốt phần còn lại
SWI Prolog là ngôn ngữ lập trình logic cho phép định giá câu truy vấn đối với chương trình logic và phần mềm hoàn toàn miễn phí Từ khi bắt đầu vào năm 1987, SWI Prolog đã được phát triển mạnh mẽ do nhu cầu của các ứng dụng thế giới thực, được sử dụng rộng rãi trong nghiên cứu và giáo dục cũng như các ứng dụng thương mại SWI Prolog hoạt động theo hệ thống đơn lẻ, có giao diện trao đổi 2 chiều linh hoạt
Trang 42 Sử dụng SWI Prolog
2.1 Bắt đầu Prolog và tải một chương trình
Khởi động swipl-win.exe có thể được bắt đầu từ StartMenu hoặc bằng cách mở một tập tin có đuôi là pl từ cửa sổ Windows của Prolog Thư mục cài đặt (mặc định C: \ Program Files \ swipl ) chứa một thư mục demo với các tập tin likes.pl Tập tin này có thể được mở trong Prolog từ StartMenu, bằng cách mở likes.pl trong cửa sổ Windows hoặc bằng cách sử dụng lệnh trong ứng dụng Prolog Chấm dứt lệnh với một dấu chấm hết ( )
? [swi ('demo / like')]
Nếu Prolog được khởi động bắt đầu từ trình đơn, nó sẽ được thông qua tùy chọn win_app, làm cho nó bắt đầu bằng tương đương cục bộ của MyDocuments \ Prolog Thư mục này được tạo ra nếu nó không tồn tại
Cửa sổ làm việc của SWI Prolog có hình như sau:
Trang 5SWI Prolog làm việc theo chế độ tương tác Dấu nhắc lệnh SWI Prolog là một cặp dấu chấm hỏi và dấu gạch ngang (dấu trừ), được liệt kê thứ tự 1, 2, 3, để theo dõi quá trình làm việc của người sử dụng, theo sau là con trỏ màn hình:
Để thoát khỏi SWI Prolog ta dùng lệnh File/ Exit hoặc dùng
vị từ halt:
?-halt
2.2 Đang thực hiện truy vấn
Sau khi một chương trình Prolog được biên dịch và tải vào bộ nhớ, người sử dụng có thể đặt câu truy vấn (kết thúc bởi một dấu chấm) Tùy theo câu truy vấn, Prolog trả lời YES hoặc
NO và kèm theo kết quả của X=<value> nếu trong X có chứa biến X nào đó Trong trường hợp có nhiều câu trả lời, ngay sau kết quả trả lời đầu tiên, người sử dụng có thể đặt một dấu chấm phẩy “;” nếu muốn tiếp tục yêu cầu Prolog đưa ra các câu trả lời khác Tiếp tục quá trình này, Prolog lần lượt đưa ra các kết quả khác nhau cho đến khi, hoặc Prolog trả lời NO thì có nghĩa
là không còn câu trả lời nào nữa, hoặc YES, nếu người sử dụng muốn dừng lại bằng cách gõ phím Enter Người sử dụng có thể nhận được thông báo lỗi nếu câu truy vấn có vấn đề:
ERROR: Undefined procedure< / >% người sử dụng
đã gõ sai tên liên tục,
Hoặc
ERROR: Syntax error: Operator expected % người sử dụng đã gõ sai biểu thức
Trang 62.3 Lệnh trên menu
Bảng điều khiển SWI-Prolog được cung cấp bởi swipl-win.exe có một menu để truy cập vào các lệnh phổ biến
nhất được sử dụng Sau đây là một số lệnh phổ biến:
File/Reload modified files
Lệnh này tải lại tất cả các tệp nguồn nạp đã được sửa đổi bằng cách sử dụng make / 0
File / Navigator
Mở một khung nhìn mới về các tệp tin Prolog và các vị từ
mà chúng chứa
Settings/Font
Cho phép thay đổi phông chữ của bảng điều khiển
Settings/User init file
Chỉnh sửa tệp cá nhân hoá người dùng Nếu tập tin đó không tồn tại, nó đầu tiên cài đặt một tập tin mặc định như swipl.ini có chứa các cài đặt được sử dụng phổ biến trong nhận xét
Settings/Stack sizes
Cho phép xác định kích thước tối đa mà các ngăn xếp Prolog khác nhau được phép phát triển Mặc định của hệ thống được chọn để làm cho các chương trình lỗi gặp thất bại nhanh chóng với phần cứng khiêm tốn Các chương trình có cấu trúc
dữ liệu lớn hoặc nhiều điểm lựa chọn thường cần các ngăn xếp lớn hơn Lưu ý rằng quy trình Prolog đang hoạt động đang phát triển với kích thước bộ nhớ vật lý của máy tính của bạn có thể làm cho hệ thống rất chậm
Trang 7Cố gắng làm gián đoạn tiến trình Prolog đang chạy Điều
này giống như cách sử dụng Control-C Đôi khi ngắt không
được tôn trọng hoặc mất rất nhiều thời gian để xử lý Đóng cửa
sổ hai lần cung cấp một cách để buộc Prolog phải dừng lại
Run/New thread
Tạo ra một cửa sổ tương tác mới đang chạy trong một thread riêng biệt của thực hiện Điều này có thể được sử dụng
để kiểm tra cơ sở dữ liệu hoặc chương trình trong khi nhiệm vụ chính tiếp tục
Debug/Edit spy points
Chỉnh sửa điểm phá vỡ trên các vị từ Từ trình soạn thảo PceEmacs điểm phá vỡ cũng có thể được đặt trên các lời gọi cụ thể từ các điều khoản cụ thể
Debug/Graphical debugger
Sử dụng trình gỡ lỗi mức nguồn trên trình gián điệp tiếp theo hoặc điểm ngắt hoặc lời gọi khác cho phép trình gỡ lỗi
Help
Menu trợ giúp cung cấp các điểm xuất phát khác nhau
cho các tài liệu có liên quan Các mục bị gắn cờ (trên www) mở trình duyệt internet mặc định của bạn trên một
trang của trang web SWI-Prolog
2.4 Chỉnh sửa các chương trình Prolog
Có ba tùy chọn để chỉnh sửa Một là để chạy một trình soạn thảo đã chọn trong một cửa sổ riêng biệt và sử dụng make / 0 lệnh mô tả dưới đây để tải lại các tệp đã sửa
Trang 8đổi Ngoài tùy chọn này, Prolog có thể được sử dụng để xác định các vị từ, mô-đun và các tệp được tải bằng cách xác định trình soạn thảo được lựa chọn để sử dụng với lệnh edit / 1, được mô tả dưới đây Điều này đạt được bằng cách chỉnh sửa tệp tin cá nhân hóa (xem phần 1.3 ) và làm theo các hướng dẫn trong nhận xét
Trình soạn thảo mặc định là trình soạn thảo có sẵn
được gọi là PceEmacs Trình soạn thảo này cung cấp sự hỗ trợ
về màu sắc dựa trên phân tích cú pháp thời gian thực và phân tích chéo của chương trình
Các tùy chọn chỉnh sửa khác bao gồm GNU-Emacs, SWI-Prolog-Editor và môi trường PDT dựa trên Eclipse Xem http://www.swi-prolog.org/IDE.html để có một cái nhìn tổng quan cập nhật
2.5 Một số lệnh hữu ích
Phần này cung cấp một tổng quan rất ngắn về các vị từ quan trọng hoặc thường được sử dụng SWI-Prolog để kiểm soát môi trường
File\Consult
Mở tệp nguồn Trên Windows, các thư mục có thể được chỉ định với DOS /Windows\ , phải được thoát ra, hoặc bằng cách sử dụng tiêu chuẩn POSIX / Đặc biệt khi sử dụng trong mã nguồn, / được ưa thích hơn vì nó là di động Một danh sách Prolog ([ ]) có thể được sử dụng để viết tắt lệnh tư vấn Phần
mở rộng tệp tin ( pl cũng như lựa chọn được lựa chọn) có thể được bỏ qua Dưới đây là một số ví dụ:
Trang 9? - consult (likes) Tải likes.pl từ thư mục hiện
tại (xem pwd / 0 )
? - ['C: / Program Files / pl /
demo / likes']
Tải likes.pl sử dụng đường dẫn tuyệt đối
? - ['C: \\ Chương trình Files
\\ pl \\ demo \\ likes ']
Cùng sử dụng tên đường dẫn kiểu Windows
pwd
In thư mục làm việc (thư mục)
ls
Liệt kê các tập tin trong thư mục hiện hành
edit
Nếu Prolog được bắt đầu bằng cách mở một .pl tập tin trong thám hiểm, chỉnh sửa tập tin này Cũng có sẵn từ trình đơn
edit ( + Spec )
Chỉnh sửa tệp tin, vị từ, mô đun, v.v với tên đã cho Nếu
nhiều mục được đặt tên Spec nó nhắc nhở cho sự thay thế
mong muốn
make
Tải lại tất cả các tệp đã được thay đổi kể từ lần nạp cuối cùng Thông thường được sử dụng sau khi chỉnh sửa một hoặc nhiều tệp
gtrace
Bắt đầu trình gỡ rối đồ họa Có ba cách để sử dụng Được nhập dưới dạng mục tiêu duy nhất ở cấp cao nhất, truy vấn tiếp theo
sẽ được tìm kiếm Ngoài ra, nó có thể được sử dụng kết hợp với
Trang 10mục tiêu được gỡ lỗi: ? - gtrace, chạy và cuối cùng bạn có thể bao gồm nó trong chương trình của bạn để bắt đầu truy tìm tại một điểm cụ thể hoặc dưới một điều kiện cụ thể:
,
(var (X) -> gtrace; true),
,
trace
Giống như gtrace, nhưng dựa trên văn bản trên bàn điều khiển
apropos ( + Keyword)
Tìm kiếm tất cả các vị từ chứa Keyword trong tên của nó hoặc
mô tả ngắn Nếu một môi trường GUI có sẵn thì kết quả là các siêu liên kết Nếu không sử dụng help/ 1 để biết chi tiết về các lần truy cập được chọn
help ( + Spec )
Giúp đỡ Spec , thường là tên của một chức năng giao diện định
vị hoặc C
3.Các quy ước trong SWI Prolog
- Hằng số, chẳng hạn 1, 2, 5
- Hằng chuỗi bắt dầu bằng một chữ cái viết thường hoặc ngoài ra có thể được bao gồm trong dấu nháy đơn
- Hằng logic: true, false
- Biến: bắt đầu bằng chữ hoa hoặc dấu gạch ngang dưới ‘_’
- Các phần tử của thân quy tắc được ngăn cách bởi dấu phẩy ‘,’
Trang 11- Mỗi quy tắc/sự kiện/truy vấn kết thúc bằng dấu chấm
‘.’
- Ký hiệu “”trong quy tắc được viết là “:-“
- Các chú thích bắt đầu với “%” (phần còn lại của dòng này sẽ được bỏ qua)
4 Cài đặt
4.1 Các phiên bản Windows được hỗ trợ
SWI-Prolog yêu cầu Windows XP hoặc mới hơn (XP, Vista, Windows-7) Trang tải về của SWI-Prolog chứa các chương trình nhị phân cũ hơn chạy trên các phiên bản cũ của Windows
4.2 Chọn phần mở rộng tệp tin
Theo mặc định, Prolog sử dụng phần mở rộng pl để chỉ các tập tin nguồn Prolog Đáng tiếc phần mở rộng này mâu thuẫn với ngôn ngữ Perl Nếu muốn sử dụng cả hai trên cùng một máy Windows SWI-Prolog cho phép chọn một phần mở rộng khác trong quá trình cài đặt Phần mở rộng .pro là một giải pháp thay thế thường được sử dụng Nếu tính di động là
vấn đề, bạn nên sử dụng phần mở rộng thay thế chỉ cho tải
tệp tin , tệp nguồn tải toàn bộ chương trình và sử dụng tệp
thông thường .pl mở rộng cho các thư viện và các tập tin tải
từ các tập tin khác
4.3 Các chương trình cài đặt
Bảng dưới đây liệt kê các thành phần được cài đặt Một
số thành phần được đánh dấu (32-bit) hoặc (64-bit) Hầu hết điều này là do phiên bản 64-bit được xây dựng bằng cách sử dụng các công cụ gần đây hơn và từ các phiên bản gần đây của
Trang 12các thư viện yêu cầu sử dụng các quy ước đặt tên khác nhau Điều này sẽ có thể được đồng bộ hóa trong tương lai
Chương trình
bin \ swipl-win.exe Ứng dụng Windows mặc
định để sử dụng tương tác bin \ swipl.exe Phiên bản dựa trên điều
khiển cho các mục đích viết kịch bản
Tiện ích
bin \ swipl-ld.exe Linker front-end để tạo các
file thực thi hỗn hợp Prolog /
C / C ++
bin \ swipl-rc.exe Manipulate Prolog các tập
tin nguồn lực
Thư mục quan trọng
bin Các file thực thi và các file
DLL
boot Nguồn cho predicates hệ
thống Include Các tệp tin tiêu đề C / C ++
để nhúng hoặc tạo các phần mở rộng
xpce \ prolog \ lib Thư viện XPCE / Prolog
Trang 13DLL và các tệp hỗ trợ khác
boot32.prc Trạng thái Prolog ban đầu
(32 bit) boot64.prc Trạng thái Prolog ban đầu
(64 bit)
\ bin \ libswipl.dll Hạt nhân Prolog
\ bin \ plterm.dll Cửa sổ cho swipl-win.exe
pthreadVC2.dll
Thư viện thời gian chạy POSIX (64-bit)
Extension DLLs (plugin)
\ bin \ cgi.dll Thu thập CGI GET và POST
đối số
double_metaphone
dll
Soundex (âm thanh tương tự)
\ bin \ memfile.dll Trong `bộ nhớ tạm thời` tập
tin '
\ bin \ odbc4pl.dll Giao diện ODBC
\ bin \ plregtry.dll Giao diện đăng ký Windows
porter_stem.dll
Thực hiện
\ bin \ random.dll Máy phát số ngẫu nhiên di
động
\ bin \ rdf_db.dll Cơ sở dữ liệu RDF
Trang 14\ bin \ readutil.dll Tiện ích đọc nhanh
\ bin \ sgml2pl.dll Trình phân tích cú pháp
SGML / XML
\ bin \ socket.dll Giao diện cổng Prolog
\ bin \ table.dll Truy cập tệp được cấu trúc
dưới dạng bảng
\ bin \ time.dll Thư viện báo thức và thời
gian
\ bin \ xpce2pl.dll Hệ thống đồ họa XPCE
\ bin \ zlib1.dll Thư viện nén (32-bit)
\ bin \ zlibwapi.dll Thư viện nén (64-bit)
\ bin \ zlib4pl.dll Giao diện thư viện nén
4.4 Các phím và trình đơn đã được cài đặt
Loại tập tin .pl hoặc lựa chọn thay thế (xem phần 3.2 ) có liên quan đến swipl-win.exe Một thư mục đã chọn (mặc định là SWI-Prolog) được thêm vào trình đơn bắt đầu giữ phím tắt để Prolog và một số tiện ích liên quan Các khoá đăng
ký sau đây đang được sử dụng Phiên bản 64-bit sử dụng Prolog64 thay vì Prolog như một chìa khóa để chứa cài đặt của cả hai phiên bản trên cùng một máy Lưu ý rằng việc mở một .pl tập tin có thể được liên kết với một trong các phiên bản Prolog được cài đặt
HKEY_LOCAL_MACHINE \ Software \ SWI \ Prolog
fileExtensi
on
Phần mở rộng được sử dụng cho các tệp Prolog
Trang 15group Nhóm menu bắt đầu
home Thư mục cài đặt
HKEY_CURRENT_USER \ Software \ SWI \ Plwin \ Console Lưu ý: cửa sổ thread-cửa sổ lưu trữ cùng một thông tin trong các phím con
Height Chiều cao cửa sổ trong các đơn vị ký
tự Width Chiều rộng cửa sổ trong các đơn vị
ký tự
X Cạnh trái của cửa sổ theo đơn vị
pixel
Y Cạnh trên cùng của cửa sổ trong các
đơn vị pixel SaveLines Số dòng có sẵn cho chương trình
quay lại
4.5 Cấp độ thực hiện
Trình cài đặt yêu cầu quản trị viên (Vista và mới hơn)
để có thể viết các phím tắt và các phím đăng ký
4.6 Tạo biểu tượng trên màn hình
Kéo phải swipl-win.exe vào desktop và chọn
'Create shortcut' Sau đó chỉnh sửa thuộc tính và thêm win_app vào dòng lệnh để bắt đầu ứng dụng MyDocuments \ Prolog
5.Một số ví dụ
Ví dụ 1: Xét chương trình logic sau:
Trang 16luongbang(X,Y) luong(X,Z)^luong(Y,T)^(Z=T)
luong(an,300), luong(binh,400), luong(hai,500),
luong(tuan,400), luong(long,450)
Cài đặt trong SWI Prolog như sau:
luong(an,300).
luong(binh,400).
luong(hai,500).
luong(tuan,400).
luong(long,450).
luongcaohon(X,Y):-luong(X,Z),luong(Y,T),Z>T.
luongbang(X,Y):- luong(X,Z),luong(Y,T),Z=T.
Kết quả của truy vấn ? luongcaohon(X,tuan) được thể hiện như sau:
Ví dụ 2: Tính giai thừa: