« Home « Kết quả tìm kiếm

Lập Trình Logic Trong ProLog - PGS.TS. PHAN HUY KHÁNH phần 4


Tóm tắt Xem thử

- Sắp đặt thứ tự các mệnh đề và các đích.
- Nguy cơ gặp các vòng lặp vô hạn Xét mệnh đề sau đây.
- Nghĩa của mệnh đề là « p đúng nếu p đúng».
- Về mặt khai báo, mệnh đề hoàn toàn đúng đắn.
- Tuy nhiên, về mặt thủ tục, mệnh đề không dùng để làm gì.
- Trong Prolog, mệnh đề này gây ra rắc rối.
- Ta xét câu hỏi.
- Sử dụng mệnh đề trên, đích p được thay thế bởi chính đích p , rồi lại được thay thế bởi p, và cứ thế tiếp tục.
- Trở lại ví dụ con khỉ và quả chuối trên đây, ta có thể thay đổi thứ tự các đích bên trong của các mệnh đề.
- Chẳng hạn các mệnh đề thuộc về quan hệ displacement đã được sắp xếp như sau.
- Các mệnh đề này nói rằng con khỉ có thể nắm lấy quả chuối (grab), trèo lên hộp (climbing), v.v.
- Về mặt ngữ nghĩa thủ tục, thứ tự các mệnh đề nói rằng trước con khỉ với lấy được quả chuối, nó phải trèo lên hộp, trước khi trèo lên hộp, nó phải đẩy cái hộp, v.v.
- Bây giờ nếu ta thay đổi thứ tự thì điều gì sẽ xảy ra ? Giả thiết rằng mệnh đề walking xuất hiện đầu tiên.
- Sau khi mệnh đề thứ hai được áp dụng, ta có.
- Áp dụng lần nữa mệnh đề thứ hai của couldtake.
- Mệnh đề đầu tiên có phần đầu có thể so khớp với đích đầu tiên trên đây bây giờ sẽ là walking (mà không phải climbing như trước)..
- Bằng cách áp dụng mệnh đề thứ hai couldtake , ta nhận được.
- Tiếp tục áp dụng mệnh đề walking cho mệnh đề thứ nhất và ta có.
- Thực tế, ta nhận thấy rằng mệnh đề thứ hai của couldtake và walking đã được sử dụng qua lại.
- Câu hỏi chúng ta muốn đặt ra là : liệu chúng ta có thể thay đổi chương trình sao cho có thể dự phòng trước nguy cơ bị quẩn ? Có phải chúng ta luôn luôn bị phụ thuộc vào sự sắp đặt thứ tự đúng đắn của các mệnh đề và các đích ? Rõ ràng rằng các chương trình lớn sẽ trở nên dễ sai sót nếu phải dựa trên một thứ tự nào đó của các mệnh đề và các đích.
- Thay đổi thứ tự mệnh đề và đích trong chương trình.
- Chương trình mô tả quan hệ tổ tiên : ancestor(X, Z).
- Ta hãy xét một số biến thể của chương trình này.
- (1) Thứ tự các mệnh đề trong một chương trình, và (2) Thứ tự các đích bên trong thân của các mệnh đề..
- Thủ tục ancestor trên đây gồm hai mệnh đề, đuôi mệnh đề thứ nhất có một đích con và đuôi mệnh đề thứ hai có hai đích con.
- (2) Đảo thứ tự các đích cho mỗi sắp đặt thứ tự các mệnh đề..
- Biến thể a : hoán đổi các mệnh đề.
- Biến thể b : hoán đổi các đích của mệnh đề thứ hai anc3(X, Z).
- Biến thể c : hoán đổi các đích và các mệnh đề anc4 (X, Z).
- Biến thể a của quan hệ tổ tiên trả lời câu hỏi.
- So sánh các quá trình so khớp trong các hình vẽ, ta thấy rằng cần khai báo các mệnh đề đủ đơn giản khi giải các bài toán.
- Biến thể b của quan hệ tổ tiên trả lời câu hỏi.
- Biến thể c của quan hệ tổ tiên trả lời câu hỏi.
- thể nghiệm của một mệnh đề, biến thể của một mệnh đề.
- Một chương trình Prolog bao gồm các mệnh đề.
- Có ba kiểu mệnh đề : sự kiện, luật và câu hỏi..
- Một thủ tục là một tập hợp các mệnh đề liên quan đến cùng một quan hệ..
- Một chương trình Prolog thường có nghĩa khai báo là chủ yếu.
- Theo nghĩa thủ tục, chương trình Prolog thực hiện quá trình tìm kiếm, so khớp và quay lui..
- Nghĩa khai báo của các chương trình thuần Prolog không phụ thuộc sự sắp đặt các mệnh đề, cũng như không phụ thuộc sự sắp đặt các đích bên trong các mệnh đề..
- Nghĩa thủ tục phụ thuộc thứ tự các đích và các mệnh đề.
- Sự sắp đặt lại thứ tự các đích và các mệnh đề là một trong những phương pháp nhằm tránh các vòng lặp quẩn vô hạn..
- Từ chương trình Prolog dưới đây:.
- Từ chương trình execute trong lí thuyết, hãy vẽ sơ đồ quá trình thực hiện của Prolog từ câu hỏi sau.
- Cho các vị từ p , a1 , a2 , a3 , a4 được định nghĩa bởi các mệnh đề sau đây : p(a, b)..
- Viết gói các mệnh đề định nghĩa các hàm sau.
- Viết chương trình Prolog từ biểu diễn lôgich sau đây.
- Các phép toán và số học.
- Chương này trình bày số học sơ cấp, các phép toán và một số vị từ chuẩn được sử dụng trong các chương trình Prolog..
- Các phép toán số học.
- Sau đây là bảng các phép toán số học chuẩn (standard arithmetic operations) của Prolog.
- Ký hiệu Phép toán + Cộng (addition.
- Biểu thức số học.
- Vị từ này là một phép toán tiền tố (infix operator) có dạng.
- Tham đối bên trái phép toán is là một đối tượng sơ cấp.
- Tham đối bên phải là một biểu thức số học được hợp thành từ các phép toán số học, các số và các biến.
- Vì phép toán is sẽ khởi động việc tính toán, cho nên khi thực hiện đích.
- Trong Prolog, các phép toán số học kéo theo sự tính toán trên các dữ liệu.
- Để thực hiện các phép toán số học, cần biết cách gọi dùng theo kiểu Prolog mà không thể gọi trực tiếp ngay được như trong các ngôn ngữ lập trình mệnh lệnh..
- Để Prolog tiến hành tính toán trên các phép toán số học, sử dụng phép toán is như sau.
- Phép cộng thực hiện được là nhờ một thủ tục đặc biệt kết hợp với phép toán.
- Độ ưu tiên của các phép toán số học tiền định của Prolog cũng là độ ưu tiên thoả mãn tính chất kết hợp trong toán học.
- Các cặp dấu ngoặc có thể làm thay đổi thứ tự độ ưu tiên giữa các phép toán.
- Định nghĩa các phép toán trong Prolog.
- với + và * là các phép toán (operator), còn a , b và c là các toán hạng (operand), hay tham đối (argument).
- Prolog cho phép viết các biểu thức dưới dạng trung tố, là biểu diễn bên ngoài, nhưng thực chất, các biểu thức được biểu diễn bên trong vẫn ở dạng tiền tố, theo quy ước viết các hạng trong một mệnh đề..
- Prolog quy ước phép toán có độ ưu tiên cao nhất là hàm tử chính của hạng..
- Mỗi NLT có thể định nghĩa các phép toán riêng của mình, chẳng hạn định nghĩa các nguyên tử is và support như là những phép toán trung tố để viết các sự kiện trong một chương trình.
- Mỗi phép toán là một nguyên tử có độ ưu tiên là một giá trị số, tuỳ thuộc phiên bản Prolog, thông thường nằm trong khoảng giữa 1 và 1200.
- Các phép toán được đặc tả bởi hỗn hợp tên phép toán f và các biến (tham đối) x và y .
- Mỗi đặc tả cho biết cách kết hợp (associative) phép toán đó và được chọn sao cho phản ánh được cấu trúc của biểu thức.
- Một phép toán trung tố được ký hiệu bởi một f đặt giữa hai tham đối dạng xfy .
- Còn các phép toán tiền tố và hậu tố chỉ có một tham đối được đặt trước (hoặc đặt sau tương ứng) dấu phép toán f.
- Có ba nhóm kiểu phép toán trong Prolog như sau.
- Các phép toán Không kết hợp Kết hợp phải Kết hợp trái.
- Ba nhóm kiểu phép toán trong Prolog..
- Do x là một tham đối nên độ ưu tiên của x phải thấp hơn hẳn độ ưu tiên của phép toán f , còn tham đối y có độ ưu tiên thấp hơn hoặc bằng độ ưu tiên của phép toán f.
- Khi gặp một biểu thức chứa phép toán op dạng : a op b op c.
- Các quy tắc trên cho phép loại bỏ tính nhập nhằng của các biểu thức chứa các phép toán có cùng độ ưu tiên.
- Bây giờ ta lấy một ví dụ khác về phép toán tiền tố một ngôi not .
- có độ ưu tiên là 500.
- Trái lại, nếu phép toán not được định nghĩa như là fx , thì biểu thức trên sẽ không còn đúng nữa, vì rằng tham đối của not đầu tiên là not p , sẽ có cùng độ ưu tiên với nó.
- Tính dễ đọc của một chương trình tuỳ thuộc vào cách sử dụng các phép toán..
- Trong các chương trình Prolog, những mệnh đề sử dụng phép toán mới do người dùng định nghĩa thường được gọi là các chỉ dẫn hay định hướng (directive).
- Các chỉ dẫn phải xuất hiện trước khi một phép toán mới được sử dụng đến trong một mệnh đề, có dạng như sau.
- Chẳng hạn người ta định nghĩa phép toán is nhờ chỉ dẫn.
- Chỉ dẫn này báo cho Prolog biết rằng is sẽ được sử dụng như là một phép toán có độ ưu tiên là 600 , còn ký hiệu đặc tả xfx chỉ định đây là một phép toán trung tố.
- Ý nghĩa của xfx như sau : f là dấu phép toán được đặt ở giữa, còn x là tham đối được đặt hai bên dấu phép toán..
- Việc định nghĩa một phép toán không kéo theo một hành động (action) hoặc một thao tác (opration) nào.
- Về nguyên lý, không một thao tác nào trên dữ liệu được kết hợp với một phép toán (trừ một vài trường hợp hiếm gặp đặc biệt, như các phép toán số học).
- Tương tự như mọi hàm tử, các phép toán chỉ được dùng để cấu trúc các hàm tử, mà không kéo theo một thao tác nào trên các dữ liệu, dẫu rằng tên gọi «phép toán» có thể gợi lên vai trò hoạt động..
- Prolog cung cấp sẵn một số phép toán chuẩn.
- Những phép toán tiền định nghĩa này thay đổi tùy theo phiên bản Prolog.
- Hình 3.5 dưới đây trình bày một số phép toán chuẩn tiền định nghĩa của Prolog.
- Chú ý rằng cùng một mệnh đề có thể.
- độ ưu tiên 0.
- Các tên phép toán được viết trong một danh sách..
- Các phép toán tiền định nghĩa trong Prolog như sau : Độ ưu tiên Cách kết hợp Các phép toán.
- Các phép toán tiền định nghĩa trong Prolog..
- Trong Prolog, mệnh đề trên phải được viết như sau

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt