1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đề tài“ lập TRÌNH LOGIC

34 395 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 156,5 KB

Nội dung

Trờng Đại học Bách khoa Hà Nội Trung tâm Đào tạo sau Đại học - Bài tập lớn Đề tài: Lập trình logic Giáo viên hớng dẫn: Nhóm : Lớp : Hà Nội, tháng 09 năm 2005 Mục lục Prolog 1.1 Giới thiệu Prolog 1.2 Từ vựng quy tắc cú pháp Prolog 1.1.1.Bảng ký hiệu Prolog .5 1.1.2 Toán tử : .5 1.3 Các kiểu liệu prolog : 1.4 Cú pháp Prolog 1.5 Cấu trúc chơng trình Prolog .11 Quá trình tìm lời giải hay trình thực đích prolog 15 2.1 Sự 15 2.2 Đồng hoá : 15 2.3 Tìm kiếm lời giải prolog thuật giải phân tích với văn phạm 16 2.4 Phân tích tất định 23 A, S V* 24 Giải thuật phân tích đệ quy dới 32 Begin 34 Prolog 1.1 Giới thiệu Prolog Prolog đợc Alain Colmerauer thiết kế trờng Tổng hợp Marseille-Pháp vào năm 1971 Sau đợc phát triển mạnh Edilburgh Anh version chuẩn Prolog đợc tạo Năm 1983 Nhật Bản công bố chơng trình nghiên cứu chế tạo máy tính hệ thứ với Prolog đợc chọn làm ngôn ngữ tảng giống nh Assembly làm tảng cho máy tính theo kiến trúc voneumam Điểm mạnh của Prolog so với ngôn ngữ lập trình truyền thống (Pascal, C, ) : + Đối với ngôn ngữ lập trình truyền thống, đứng trớc toán cần phải giải quyết,ngời lập trình cần phải xác định cấu trúc liệu cần dùng để biểu diễn liệu giải thuật tác dụng lên liệu để đạt đợc kết mong muốn Ví dụ nh : Đứng trớc toán quản lý sinh viên, ngời lập trình phải xác định xem phải dùng cấu trúc liệu để biểu diễn đợc đối tợng sinh viên Chẳng hạn, họ nghĩ đến kiểu ghi : Sinh viên = record Ten : string 30; Diem : real ; End; Sau biểu diễn đợc đối tợng, họ phải nghĩ tới muốn tác động lên đối tợng ( xếp, tìm kiếm ) họ phải dùng thuật toán Niklaus Wirth đa công thức tiếng: Programs = date structures +Alongths + Còn với Prolog : Prolog đợc coi ngôn ngữ sở cho lập trình logic Đứng trớc toán ngời lập trình khai báo cho máy tính số khẳng định cần thiết tính chất đối tợng số quy luật suy diễn mô tả quan hệ đối tợng, dựa việc suy diễn theo luật kết hợp với khẳng định có, chơng trình prolog tự xác định cách thức dẫn lời giải Ví dụ : - Đã ngời phải chết, Hùng ngời Hùng có chết không? Muốn có giải đáp, ta khai báo cho Prolog biết Hùng ngời cung cấp cho Prolog luật suy diễn : Là ngời phải chết Sau ta hỏi Prolog : Hùng có chết không ? Dựa vào khẳng định luật suy diễn đợc cung cấp, Prolog tự động tìm câu trả lời Trong Prolog: Nếu biết A từ A suy B B Prolog không cần quan tâm đến A, B biểu diễn cho đối tợng gì, thể cho kiện nào, đợc biểu diễn kiểu kiện ( số nguyên, số thực, file, danh sách ) Với Prolog lập trình logic : Chơng trình = Sự kiện + Suy diễn Kết Ngày nay, Prolog công cụ quan trọng cho việc lập trình lĩnh vực trí tuệ nhân tạo Do Prolog có khả giải hiệu vấn đề có liên quan đến xử lý ký hiệu khả suy diễn tự động đợc cài đặt sẵn hệ thống Prolog đợc dùng để viết chơng trình nh : + Dịch ngôn ngữ : Dịch ngôn ngữ tự nhiên ngời, viết chơng trình dịch Compiler thờng ngắn nhiều so với ngôn ngữ khác + Tạo giao diện ngời máy ngôn ngữ tự nhiên : + Xây dựng hệ chuyên gia + Cài đặt sở liệu quan hệ + Giải vấn đề liên quan đến logic toán học, lý thuyết trừu tợng, xử lý công thức, phơng trình vi phân, tích phân Một câu hỏi đặt : Cơ chế tìm hiểu lời giải Prolog nh ? Để trả lời câu hỏi , trớc tiên ta phải làm quen với khái niệm sở Prolog 1.2 Từ vựng quy tắc cú pháp Prolog 1.1.1.Bảng ký hiệu Prolog - Chữ : + Nhóm chữ viết hoa: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z + Nhóm chữ viết thờng : a b c d e f g h i j k l m n o p q r s t u v w x y z +Chữ số : 0123456789 + Các ký hiệu đặc biệt : !, ,#,$,%,&,,(,),-,~,^,\,|,{,},@,+,-,*,/,:, < , > , , ? 1.1.2 Toán tử : + Toán tử số học : + , - , * , /, mod, div + , - ( Phép đổi dấu ) + Toán tử quan hệ : < , < = , > , > = , = , < > , > < Để thể tri thức Prolog sử dụng hình thức vị từ nh nói phần I Hung eats apple đợc biểu diễn eats ( Hung, apple ) Hung loves Linh đợc biểu diễn loves ( Hung, Linh) Hung owns books đợc biểu diễn owns(Hung, book) Và ngợc lại có vị từ : Likes (Hung, Computers ) đợc hiểu : Hung likes Computers 1.3 Các kiểu liệu prolog : Char : Là ký tự dấu nháy đơn vị ví dụ : a, b, c Integer : Là số nguyên, giới hạn số nguyên : -32768 đến 32767 Số thực : Số thực tĩnh : 23.18 Số thực động: 1e+21 Số thực nằm giới hạn : 1e 307 1e + 307 Trong biểu thức có số nguyên số thực số nguyên đợc chuyển thành số thực String : Xâu ký tự đợc viết dấu nháy kép Ví dụ : Computers, house Symbol : Ký hiệu Chia làm loại : + Dãy chữ , số dấu gạch dới viết liên tiếp,ký tự đầu phải chữ viết thờng + Dãy ký tự đợc viết dấu nháy kép : Banana Symbol string đợc sử dụng thay cho nhau, nhng chúng đợc trình biên dịch Turbo Prolog xử lý khác + Symbol đợc chơng trình biên dịch ghi vào ký hiệu nạp lên nhớ nhờ thủ tục tìm kiếm đồng đợc xử lý nhanh Tuy nhiên đòi hỏi nhớ cho ký hiệu 6 File : File kiểu liệu có ý nghĩa nh kiểu liệu file ngôn ngữ lập trình truyền thống Prolog cung cấp nhiều vị từ cho phép xử lý file Vị từ : + Openread : Vị từ có đối số : Ví dụ : Openread (f, hung.txt) Tơng đơng với lệnh Assign (f, trung.txt) Reset (f); pascal Tác dụng mở file trung.txt để đọc, file đợc tác động qua biến f + Openwrite (f, trung.txt) Vị từ tơng đơng với lệnh Assign (f, trung.txt) Rewrite(f) Nếu file trung.txt tồn nội dung bị xoá + Openappend(f, trung.txt) Mở file trung.txt để ghi thêm, trỏ đặt cuối file Sau mở file, ta thao tác với nội dung file nhờ vị từ đợc Prolog cung cấp sẵn : Writedevice ( biến file ) Readdevice ( biến file ) Kiểu cấu trúc ( Đối tợng phức hợp ) Để biểu diễn đối tợng nh đối tợng sinh viên pascal ta phải sử dụng kiểu ghi record, C ta phải dùng struct, nh Prolog ta phải dùng kiểu cấu trúc Cấu trúc dùng để biểu diễn cho đối tợng mà thân lại chứa đối tợng khác Để xác định đối tợng, ta phải xác định thuộc tính đối tợng Muốn xác định đợc sinh viên ta phải xác định tên, ngày sinh Cú pháp cấu trúc giống nh cú pháp logic vị từ + Tên cấu trúc đợc gọi functor + Các thành phần cấu trúc đợc viết dấu (.) đợc phân cách dấu , Ví dụ : Sinh viên ( trung, hanoi) Sach(mot_thoang_co_don, tacgia(ntt) Danh sách Danh sách kiểu Prolog gần giống nh mảng pascal nhng lại có đặc điểm khác quan trọng + Danh sách dãy phần tử có thứ tự số phần tử danh sách không định trớc + Các phần tử danh sách kiểu liệu Danh sách đợc ký hiệu [ ] phần tử đợc viết đợc phân cách dấu phẩy + Danh sách rỗng ký hiệu [ ] + Nếu không rỗng, gồm phần : đầu ( head ), đuôi ( tail) Đầu danh sách phần xuất danh sách, đuôi phần lại danh sách sau bỏ phần đầu Ví dụ : [a] : đầu a, đuôi [ ] [a,b,c,d] : đầu a, đuôi [b,c,d] [[a,b],c] : đầu [a,b], đuôi c + Trong danh sách : phần đầu phần đuôi biểu diễn phân cách ký hiệu | Ví dụ : [[a,b] | c] Sở dĩ phải phân danh sách làm phần đầu phần đuôi thao tác xử lý danh sách tách phần đầu phần đuôi danh sách Danh sách kiểu liệu quan trọng prolog ta xét số thao tác với danh sách phần sau : 1.4 Cú pháp Prolog Mỗi ngôn ngữ lập trình có quy tắc để viết đại lợng ( tên, số,) prolog + Hằng : Chia làm loại Hằng ký hiệu Hằng số - Hằng ký hiệu : Có loại Hằng ký hiệu : + Dãy chữ chữ số bắt đầu chữ thờng + Dãy ký hiệu nằm dấu nháy đơn - Hằng số : Dùng để biểu diễn số có mặt biểu thức - Biến : Đợc viết nh ký hiệu trừ đặc điểm phải bắt đầu chữ hoa dấu gạch dới Biến đợc dùng để biểu diễn cho đối tợng mà ta cha thể đặt tên Chẳng hạn nh muốn biết Hùng loves tất ta duyệt tất ?_loves ( hung, Hoa) ?_loves ( hung, Ly) Với ngôn ngữ tự nhiên ta phải hỏi Hung loves ? Và Prolog thể : ?_loves (hung, X) X thay cho đối tợng mà ta cha biết Hoa, Ly Prolog phân biệt đợc biến với tên gọi cụ thể đối tợng biến bắt đầu chữ hoa ký tự bắt đầu chữ thờng nằm dấu nháy đơn Biến vô danh ký hiệu dấu _ có tính chất đặc biệt ký hiệu cho đối tợng + Quy tắc viết khẳng định, vị từ o Tên vị từ bắt đầu chữ thờng o Các đối số vị từ đợc viết ngoặc đơn o Trong Prolog suy dẫn đợc viết nh sau : P : -P1 , P2 ,.Pn ( * ) Trong : P , P1 , P2, .Pn vị từ (*) đợc hiểu : P P1 P2 Cách viết tơng đơng với : P if P1 and P2 , and Pn 10 Nếu việc phân tích thành công : Đến đợc w với Top_down đợc gốc với bottom_up, ta kết luận w thuộc vào ngôn ngữ sinh văn phạm G không w không thuộc ngôn ngữ sinh văn phạm Đối với prolog đích nêu goal đợc thoả ngợc lại đích không đợc thoả Tại thời điểm trình phân tích, ta phải chọn sản xuất để mở rộng ( hay chặt cành với bottom_up ) ? | | | n chọn nào, prolog chọn luật số luật clauses trình làm thoả đích ? Có nhiều phơng pháp để giải nhng ngời ta quy hai phơng pháp + Phân tích quay lui + Phân tích tất định Phân tích quay lui : Chọn sản xuất từ sản xuất thử áp dụng, tiếp tục áp dụng sản xuất lại chọn từ sản xuất Nếu sai quay lui sản xuất trớc Đây hình ảnh chế Backtracking chế duyệt trạng thái tìm kiếm lời giải prolog + Xuất phát từ đích Prolog duyệt sở liệu clauses từ trình clauses xem có khẳng định đầu luật đồng đợc với đích không ? Nếu đợc prolog ghi nhớ vị trí tiến hành gán trị cho biến vị trí lại đầu luật P : -P 1, P2 Pn lại tiến hành làm thoả cho Pi bớc thứ k : Nếu không tìm đợc khẳng định không tìm đợc đầu luật để đồng đợc với đích bớc ta thất bại phải quay lui luật đợc đánh dấu bớc trớc ( k ) ta không áp dụng luật phải duyệt khẳng định hay luật từ vị trí sau luật 20 Giải thuật phân tích quay lui cho văn phạm G (N, T, S, P ), sản xuất đợc đánh số 1, q xâu w mô tả nh sau : + Dùng biến trỏ trỏ vào w lúc đầu vào ký hiệu trái + Dựng nút mang nhãn S đầu tiên, S đợc chọn làm nút hoạt động Thực hai thao tác sau cách đệ quy : Nếu nút hoạt động ký hiệu không kết thúc, giả sử A N, ta chọn sản xuất A x1 x2 xk dựng từ A tới nút mang nhãn x 1, x2 xk lấy x1 làm nút hoạt động Nếu nút hoạt động ký hiệu kết thúc a T So sánh với ký hiệu đợc trỏ w có khả xảy : + Nếu a trùng với ký hiệu trỏ : biến trỏ dịch vị trí bên phải lấy nút liền bên phải làm nút hoạt động + Nếu không trùng quay lui lại đến lựa chọn trớc thứ lựa chọn khác, khả vét cạn mà không suy dẫn w thông báo sai Nhận xét giải thuật phân tích quay lui cho văn phạm hay Backtracking prolog + Vì phải thử lần lợt tốn thời gian + Vấp phải khó khăn G văn phạm đệ quy trái Văn phạm đệ quy trái văn phạm chứa sản xuất dạng A A ( sản xuất đệ quy trái ) Nguyên nhân giải thuật lấy x làm nút hoạt động, rơi vào vòng lặp vô hạn Một số kết quan trọng là: 21 Phân tích top_down dừng văn phạm không chứa sản xuất đệ quy trái Tuy nhiên, hạn chế thực sự, ta biến văn phạm đệ quy trái văn phạm đệ quy phải tơng đơng với giải thuật dừng Hai văn phạm tơng đơng với sinh ngôn ngữ Cơ chế tìm lời giải prolog nh giải thuật phân tích quay lui, prolog tìm luật từ xuống dới, vậy, gặp phải luật đệ quy trái, rơi vào vòng lặp vô hạn Ví dụ nh đoạn chơng trình sau : Nguoi (X) : - nguoi ( Y), me (Y, X ), /* X ngời Y ngời Y mẹ X8/ Nguoi( ) Bây ta đặt câu hỏi ?- nguoi( ) Prolog duyệt từ xuống luật đầu đợc dùng, gán trị cho X : X = hung, tiếp đến làm thoả đích vế phải luật tức làm thoả nguoi ( Y ) để thoả đích này, lại duyệt từ đầu hết nhớ Phơng án giải + Biến đổi văn phạm đệ quy trái văn phạm tơng đơng không đệ quy trái tơng ứng biến đổi luật clause thành luật không đệ quy trái 22 + Ngoài ra, prolog cung cấp vị từ cut, vị từ không đối số ký hiệu ! , mục đích để kết thúc trình backtracking số điều kiện, logic chơng trình yêu cầu hay ta biết việc làm thoả số đích không làm tăng chất lợng lời giải, việc quay lui lúc làm thời gian Nh nói trình tìm kiếm lời giải, việc quay lui lúc làm thời gian Nh nói trình tìm kiếm lời giải bớc thứ k, prolog áp dụng luật j luật phải đợc ghi nhớ để quay lui, nhng gặp toán tử cut, đích trớc đợc thoả nh vậy, đích không thành công quay lui đợc Trái với cut, prolog cung cấp vị từ fail, vị từ fail vị từ sai mà sai prolog quay lui Nh vậy, fail đợc dùng muốn hiệu ứng backtracking xảy Nh vậy, cách tự động tìm lời giải prolog theo giải thuật backtracking hay tơng đơng với thuật toán phân tích quay lui văn phạm nên thứ tự luật đợc viết clause quan trọng, chơng trình đổi thứ tự luật với câu hỏi cho trả lời khác nh ta thấy 2.4 Phân tích tất định Phân tích tất định kiểu phân tích mà bớc đứng trớc lựa chọn: A | | n Ta biết chắn phải chọn i Tuy nhiên, giải thuật phân tích tất định áp dụng hiệu qủa đợc với lớp văn phạm phi ngữ cảnh, nghĩa với xâu w có độ dài n : ta cần tiến hành n* c ( thao tác ), văn phạm : - Văn phạm LL ( K ) 23 - Văn phạm xem trớc ( precedence) - Văn phạm LR ( K ) Văn phạm LL ( K ) ( Language Left) G = (N, T, S, P ) L(G) = ( w T* / S w ) Xét lớp VPPNC mà ta áp dụng phân tích top_down tất định : ĐN : First, follow Cho VPPNc G = ( N, T, S, P ) k Z* Xâu V* (+) Tập FIRSTk () = x T* * x, l(x) = k x, l(x) =< k FIRsTk() : tập hợp xâu kết thúc, suy dẫn từ , có độ dài =< k Nhận xét : Nếu gồn toàn ký hiệu kết thúc, ta lấy k ký tự đầu Ví dụ : G = ( N, T, S, P ) = { ( S, A )} T = { a, b } P : S a Abb/b A bS/aa First1(S ) = {a, b } A, S V* First(S)1 = First1 (a, Abb) FirstS1 (b ) = a Abb : a Abb 1(x) = 1(a) = 24 First1 ( a Abb ) = {a} = b : b 1(x ) = 1(b) = FirstS1 (b ) = {b } First1 ( A ) = {a, b } FirstS1(bS) = {b} =aa: aa 1(x) = L () = FirstS1 (aa) = {a} FirstS2 = First2 ( a Abb) FirstS2 ( b ) = a Abb : abSbb aaabb L(x) = L(ab) = 2; 1(x) = 1(aa ) = =b 1(x) = 1(b) = FirstS2 ( S ) = { ab, aa, b } Tập Followk ()= { x T*/ S x = Firstk () Tập Followk () tập hợp xâu kết thúc, liền bên phải dạng câu, độ dài =< k Ví dụ : Follow1(S) = {b} Định nghĩa sản xuất LL(k ) Cho VP G = ( N, T, S, P ), sản xuất A LL(k) : S *x A x * x z1 S *x A x * x z2 Nếu Firstk(z1 ) = Firstk ( z2 ) kéo theo = 3.Định nghĩa : Văn phạm LL ( k ) 25 G = ( N, T, S, P ) sản xuất LL ( k ) B Tính chất VP LL ( k ) đơn nghĩa phân tích câu cần tìm suy dẫn dừng lại + Tính chất : Mọi LL( k ) không đệ quy trái phân tích top down dừng + G = ( N, T, S, P ) VP LL(1) quy tắc có dạng A n , n > thoả mãn điều kiện : a First1 (i) First1 ( aj) = rỗng i n b Nếu i First1 (i) Follow ( ai) = i j Ví dụ : G = ( N, T, S, P ) N = {S, B } T = {a, b } P : S aBbb/b LL( ) B B/ aa VP tập rỗng cần áp dụng điều kiện a Quy tắc : S aBbb/b First1 (aBbb) First1 ( b _ ={a} { b} = Quy tắc : B bS/aa First1 (bS ) First1( aa ) = {b} {a} = ý nghĩa : Giả sử bớc cần đoạn nhận S ta xét ký hiệu vào ví dụ a S aBbb đợc sử dụng S b không sử dụng ý nghĩa phân tích : giả sử bớc cần đoán nhận S ta sử dụng c Các giải thuật phân tích LL (1 ) 26 ta xét giải thuật : giải thuật phân tích xem trớc ; giải thuật phân tích đệ quy xuống Giải thuật phân tích xem trớc : Mô tả giải thuật minh hoạ theo sơ đồ sau : Giải vào Danh sách đẩy xuống Giải X Ma trận Ptich # + Giải vào : Lu trữ xâu vào w đợc chia ô đọc đầu đọc Đầu đọc có khả đọc trớc ký hiệu giải thuật phânt ích xem trớc + Giải : Lu trữ số thứ tự sản xuất sử dụng để suy dẫn w + Danh sách đẩy xuống : Lu trữ ký hiệu V, dùng dấu # kết thúc, dấu # không thuộc V + Ma trận phân tích M : Phần quan trọng giải thuật đợc xem nh chơng trỉnh a lệnh hành động phải làm toán xem nh phép ánh xạ hàm chuyên từ V {#} x ( T {}) tới tập gồm loại phân tích lu trữ dới dạng ma trận : * , i vế phải sản xuất * Đẩy * Nhận * Sai P = ( Q, , , , q0, z0, F ) 27 i = số thứ tự Q Ma trận - Giải vào - Danh sách đẩy xuống * Cấu hình giải thuật ( W, X , ) + w Phần lại xâu vào + x - Nội dung danh sách đẩy xuống, x đỉnh + - Nội dung giải * Hoạt động giải thuật tiến hành dãy dịch chuyển hình, dịch chuyển dựa thông tin : Ký hiệu vào Ký hiệu đỉnh Thì ma trận M định cụ thể nh sau : a Viết ( w, X , )| ( W, , i ) M ( x, a ) = , x X sản xuất thứ tự i P | - dịch chuyển | + nhiều dịch chuyển | * 0,1 nhiều dịch chuyển Phân tích top- down quay lui Thay ký hieuẹ đỉnh ( X ) vế phải sản xuất đồng thời số thứ tự i viết giải b Viết ( W, a , ) | ( w, , ) M ( a, a ) = đẩy, w = aw Nếu ký hiệu xâu vàp = ký hiệu đỉnht hì đẩy ký hiệu khỏi đỉnh đầu đọc dịch ô bên phải c Viết (, #, ) | ( w, , ) M( +,e ) nhận 28 d Xâu vào đọc hết ( w = ) Danh sách đẩy xuống tận đáy - ( w LL ( G ) ) Viết (W, a , ) sai M ( x, a ) = sai trái lại a, b, c Vậy w không phụ thuộc L ( G ) Giả sử cho VP G = ( N, T, S, P ) w T* hình khởi động ( w, S , /, e ) kết thúc ( e, , ) Nói xâu w đợc đoán nhận ( phân tích giải thuật phana tích xem trớc có sử dụng ma trận phân tích M xuất phát từ hình khởi động tiến hành dãy dịch chuyển để đến hình kết thúc ( w, S =, e ) ( e, = , ) Ma trận phân tích M có giải thuật cấu trúc giải thuật xây dựng ma trận phân tích M gồm có phần Vào G = ( N, T, S, P ) LL ( ) sản xuất x đánh số từ Ra M tính phân tích ma trận với G Phơng pháp : Dùng / làm dấu đáy máy tính M xác định V {=} x T { e } a) Giả sử sxx thứ i P có dạng A M ( A, a ) = i cho a First1 ( ) A khác e Nếu a = e M ( a, b ) = , i với b Follow1 (A) b) M(a,a) = đẩy, a T c) M(=,e ) = nhận d) M(X, a ) sai, trái lại a/b/c/ 29 Ví dụ : G = ( N, T, S, P ) N = {S, B } T = {c,d} P : ) S c Bdd 2) Sd ) B ds ) B cc First1 (cEdd) First1(d) = First1 (dE) First1(cc) = a) 1) S cBdd M(S,d) = d, c phần tử First1 ( cBdd ) 2) S d M(S,d) = d, d First1( d ) B ds M ( B,d) =ds, d First1 ( cBdd) 4) B cc M(B, c ) = cc, c ( cc ) b) M (c,c ) = đẩy c T M(d,d) = đẩy d T c) M ( =, e ) = nhận d) M(x,a ) = sai X V {=} cBdd, a t {e} d,2 30 S cc,4 đẩy S S Ví dụ : Xét xâu w = cccdd dS, S đẩy S W T* ( w, S =, e ) ( w, S=, e ) ( w, =, ) S S S Nhận ( w, S, ) ( cccdd, S =, e ) ( cccdd, cBdd=, ) ( cccdd, cBdd=, ) ( ccdd, rcdd=, ) ( ccdd, rcdd=, 14 ) ( cdd, cdd=, 14 ) ( dd, dd=, 14 ) (d,d =, 14 ) (e, =, 14 ) S cBdd S cccdd Vậy 14 ptdv cccdd L(G ) Xét xâu w = cc (cc, S / , e ) ( cc, cBdd /, ) (c, Bdd /, ) (c, ccdd /, 14 ) (e, cdd /, 14 ) sai Vậy cc không thuộc L (G ) 31 Giải thuật phân tích đệ quy dới G = ( N, T, S, P ) LL ( ) T tởng chủ đạo giải thuật ứng với ký hiệu không kết thúc, ta xây dựng thủ tục tên thủ tục lấy ký hiệu ( A N ) Bắt đầu thủ tục có tên S, gọi thủ tục khác cách đệ quy tắc/ Để tiến hành thuận lợi, ta tiến hành biến đổi VP dạng BNF sang sơ đồ cú pháp ( syntax graph ) dựa quy định sau Giả sử : 1) A / n 2) Mỗi ký hiệu không kết thúc ta biến đổi 3) Mỗi ký hiệu kết thúc ta biến đổi a A 4) Nếu quy tắc có dạng A / n Nếu = x1x2.xk X1 X2 b Lặp { } Xk Ví dụ : S TA A + TA/e T FB B FB/ F (S )/a S: = X1 X2 32 n T A T A F B T A Trên sở sơ đồ cú pháp thành lập, ta diễn dịch sơ đồ S ( syntaxgraph) thành lệnh Pascal T(S) dựa quy định 1- 1) Nếu sơ đồ có dạng X1 X2 diễn dịch lệnh ghép begin T(X1) ; T(X2) ; T( X ) ; end; T(Xi) tuân theo 1-5 2) Câu lệnh chọn If K.h.v in D1 then T(1 ) else If K.h.v in D2 then T(2 ) else If K.h.v in Dn then T(n ) else sai ; T(i ) tuân theo 1- Di = First1 (i ) 3) While khV in D T() T() tuân theo 1-5 D = First1() 33 Sơ đồ dạng A gọi thủ tục có tên A diễn dịch thành if khV = a then DOC else sai SAI tên thủ tục ta lập trớc đó, bao gồm thông báo sai sót DOC : tên thủ tục ta lập trớc, cho phép đọc ký tự xâu vào Ví dụ : Procedure S Begin T; A; End; Procedure A; Begin If khv = + then Begin DOC; T; A; End {else If khi= + then ; } End; 34 [...]... diễn mà chơng trình phải tuân theo trong quá trình đi tìm lời giải Cú pháp của nó tuân theo quy tắc mà ta đã nói ở phần 2,3 4 Goal Đây là đích mà chơng trình phải giải đáp Nếu nó có sẵn trong chơng trình 12 Ví dụ nh : Goal Yeu(hung, X ) /* Hùng yêu ai */ Thì nó đợc gọi là goal nội Còn nếu chơng trình không có phần goal, khi chạy chơng trình máy sẽ đa ra Goal : - đợc gọi là goal ngoại Chơng trình sẽ chờ... ,mon) Khi chạy chơng trình ta cho Goal ngoại Truot(hung, tri_tue_nhan_tao) Ta đợc : Dự đoán là Hung truot tri_tue_nhan_tao Một câu hỏi đặt ra là : Quá trình tìm lời giải cho các câu hỏi diễn ra nh thế nào ? Để trả lời cho câu hỏi trên, ta đi tiếp phần sau : 14 2 Quá trình tìm lời giải hay quá trình thực hiện các đích của prolog 2.1 Sự bằng nhau Là một tính chất quan trọng của logic vị từ bậc nhất... đối số ký hiệu ! , mục đích để kết thúc quá trình backtracking trong một số điều kiện, do logic của chơng trình yêu cầu hay khi ta biết việc làm thoả một số đích không làm tăng chất lợng của lời giải, việc quay lui lúc này chỉ làm mất thời gian Nh đã nói trong quá trình tìm kiếm lời giải, việc quay lui lúc này chỉ làm mất thời gian Nh đã nói trong quá trình tìm kiếm lời giải ở bớc thứ k, nếu prolog... quả nếu : (2) N > 0 và (3) N1 = N-1 và (4) N1 giai thừa bằng giai thừa N1 và (5) Kết quả = N* giai thừa N1 1.5 Cấu trúc của một chơng trình Prolog Một chơng trình Prolog gồm các phần cơ bản sau : 1 Domains Khai báo kiểu các đối tợng đợc dùng trong các vị từ của chơng trình 11 Nhng nếu đối số của vị từ đợc viết dới dạng kiểu của đối số thì ta không cần phải khai báo, ví dụ nh : Bult(symbol, symbol )... ngoại Chơng trình sẽ chờ những đích đợc đa vào cần giải quyết Sau đây là một chơng trình đơn giản thể hiện cấu trúc của một chơng trình prolog Ví dụ 1 : Domains Nguoi=symbol Predicates Loves(hung,hoa) /* hung loves hoa */ Loves(kien,hoa) /* kien loves hoa */ Loves(hung, ly) /* hung loves ly */ Goal Loves(X,hoa) Chạy chơng trình ta đợc X=hung X=kien Solution Ví dụ 2 : Domains 13 Mon,nguoi=symbol predicates... thich ( hung, sach ) Thich ( hoa, tien ) Goal : Thich ( X, sach ) Tìm kiếm lời giải trong prolog là gì ? 2.3 Tìm kiếm lời giải trong prolog và các thuật giải phân tích với văn phạm Quá trình tìm kiếm lời giải thực chất là quá trình làm thoả mãn các vị từ của phần Goal mà thao tác chính là thao tác đồng nhất hoá : thay thế các biến bằng các giá trị có thể có, có bao nhiêu cách thay thế sẽ có bấy nhiêu lời... đơng với áp dụng một sản xuất thay vế trái của sản xuất bằng vế phải của nó Quá trình tìm kiếm lời giải cho một câu hỏi tơng đơng với việc phân tích xem một xâu W có thuộc ngôn ngữ sinh ra bởi một văn phạm G không ? Trớc tiên ta xét xem các giải thuật phân tích của văn phạm và sau đó xem prolog dùng giải thuật gì trong quá trình tìm kiếm lời giải Giả sử ta có văn phạm : G = ( N, T, S , P ) Trong đó :... Đối với prolog đích nêu ra ở goal đợc thoả còn ngợc lại đích không đợc thoả Tại một thời điểm trong quá trình phân tích, ta phải chọn sản xuất nào để mở rộng cây ( hay chặt cành với bottom_up ) ? 1 | 2 | 3 | n chọn nào, còn đối với prolog chọn luật nào trong số các luật của clauses trong quá trình làm thoả đích ? Có nhiều phơng pháp để giải quyết nhng ngời ta quy về hai phơng pháp chính + Phân tích... bằng chính nó Hung = hung 100 = 100 + Hai cấu trúc bằng nhau nếu nó có cùng tên ( functor ), cùng số thành phần và các thành phần tơng ứng bằng nhau 2.2 Đồng nhất hoá : Là quá trình gán giá trị ( truyền tham số ) cho các biến và quá trình này phải tuân theo quy tắc sau : + Một biến cha gán giá trị có thể đồng nhất với một đối tợng bất kỳ + Hằng có thể đồng nhất với chính nó hoặc với một biến cha đợc gán... While khV in D do T() T() tuân theo 1-5 D = First1() 33 4 Sơ đồ dạng A gọi thủ tục có tên A 5 diễn dịch thành if khV = a then DOC else sai SAI tên thủ tục ta đã lập trớc đó, nó bao gồm các thông báo về sai sót DOC : tên thủ tục ta đã lập trớc, nó cho phép đọc từng ký tự của xâu vào Ví dụ : Procedure S Begin T; A; End; Procedure A; Begin If khv = + then Begin DOC; T; A; End {else If khi= + then

Ngày đăng: 23/06/2016, 16:27

TỪ KHÓA LIÊN QUAN

w