II.5.4 Kết luận

Một phần của tài liệu Tài liệu Lập trình Prolog_chương 4-5 ppt (Trang 67 - 69)

II. Sử dụng các cấu trúc

II.5.4 Kết luận

Ví dụ bài toán tám quân hậu trên đây minh hoạ cách giải quyết một bài toán trong Prolog theo nhiều lời giải khác nhau, mỗi lời giải sử dụng một phương pháp biểu diễn cấu trúc dữ liệu. Mỗi cách biểu diễn dữ liệu đều có những đặc trưng riêng, như tiết kiệm bộ nhớ, hay biểu diễn tường minh, hay biểu diễn phức hợp các thành phần của đối tượng cần xử lý. Cách biểu diễn

dữ liệu nhằm tiết kiệm bộ nhớ có bất lợi ở chỗ là thường xuyên phải tính đi tính lại một số giá trị dữ liệu trước khi có thể sử dụng chúng.

Trong ba lời giải trên đây, lời giải thứ ba minh hoạ rõ nét hơn cả về cách xây dựng các cấu trúc dữ liệu xuất phát từ một tập hợp các phần tử đã cho có nhiều ràng buộc. Hai chương trình đầu xây dựng tất cả các hoán vị có thể rồi lần lượt kiểm tra có phải hoán vị đang xét là một lời giải không để loại bỏ những hoán vị không tốt trước khi xây dựng chúng một cách đầy đủ. Việc xác định các hoán vị gây ra tốn thời gian do phải thực hiện nhiều lần các phép tính số học. Chương trình thứ ba tránh được điều này nhờ cách biểu diễn bàn cờ hợp lý.

II.5.5. Bộ diễn dịch Prolog

Xây dựng bộ diễn dịch Prolog bằng chính ngôn ngữ Prolog, được gọi là bộ siêu diễn dịch vani (vanilla meta-interpreter).

solve(true). solve((A, B)) :- solve(A), solve(B). solve(A) :- clause(A, B), solve(B).

Mệnh đề clause(A, B) Prolog cho phép kiểm tra nếu A là một sự kiện hay vế trái (LHS) của một luật nào đó trong cơ sở dữ liệu (chương trình Prolog), B là thân hay vế phải của luật đó (nếu A là một sự kiện thì B = true). Ví dụ :

?- clause(ins(X, [H|T], [ X,H|T ]), X @=< H). X = _G420

H = _G417 T = _G418 Yes

Cách gọi bộ siêu diễn dịch vani : ?- solve(PrologGoal).

Kỹ thuật lập trình Prolog 163

Một phần của tài liệu Tài liệu Lập trình Prolog_chương 4-5 ppt (Trang 67 - 69)