Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 103 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
103
Dung lượng
1,15 MB
Nội dung
BK TP.HCM BK TP.HCM ĐẠI HỌC BÁCH KHOA TPHCM KHOA CÔNG NGHỆ THÔNG TIN THỰC HÀNH NGÔN NGỮ LẬP TRÌNH TPHCM, Tháng 12 – 2005 i Mục lục PHẦN I. PROLOG _______________________________________________________ 1 Chương I. Vị từ (predicate) - Tư duy lập trình và định nghĩa vấn đề trên Prolog ______ 2 Chương II. Các clause, cách giải thích các vấn đề trên Prolog _______________________ 5 Chương III. Môi trường lập trình B-Prolog _______________________________________ 7 III.1 Giới thiệu sơ nét về B-Prolog ____________________________________________________ 7 III.2 Cài đặt và làm việc với B-Prolog__________________________________________________ 7 III.3 Gỡ rối chương trình (debugging)__________________________________________________ 8 III.4 Các thuật ngữ cơ bản trong B-Prolog ______________________________________________ 9 III.5 Các kiểu dữ liệu và các vị từ xây dựng sẵn (built-in) cơ bản trong B-Prolog _______________ 10 Chương IV. Thực thi chương trình. - Đặt câu hỏi và nhận câu trả lời_________________ 12 Chương V. IV. Phép hợp nhất - Cơ chế tìm câu trả lời của Prolog. __________________ 15 V.1 Phép hợp nhất _______________________________________________________________ 15 V.2 Cơ chế tìm câu trả lời của Prolog ________________________________________________ 16 Chương VI. Sự quay lui - Khống chế số lượng lời giải -Vị từ nhát cắt và fail___________ 19 VI.1 Sự quay lui (back-tracing) trên Prolog_____________________________________________ 19 VI.2 Khống chế số lượng lời giải_____________________________________________________ 20 Chương VII. Lập trình đệ quy với Prolog ______________________________________ 22 Chương VIII. Danh sách trên Prolog ___________________________________________ 24 VIII.1 Cấu trúc của danh sách _____________________________________________________ 24 Chương IX. Lập trình đệ quy với danh sách trên Prolog ___________________________ 26 Chương X. Danh sách hai chiều _______________________________________________ 29 PHẦN II. LISP ________________________________________________________ 30 Chương I. Giới thiệu ________________________________________________________ 31 I.1 Lịch sử phát triển _______________________________________________________________ 31 I.2 Đặc điểm của gcLisp ____________________________________________________________ 31 1. Các đặc điểm của ngôn ngữ_____________________________________________________ 31 2. Kiểu dữ liệu _________________________________________________________________ 32 Chương II. Lập trình với gcLisp _______________________________________________ 33 II.1 Các khái niệm cơ bản _________________________________________________________ 33 1. Bắt đầu với LISP _____________________________________________________________ 33 2. Hàm và dữ liệu trong LISP _____________________________________________________ 34 3. Đánh giá____________________________________________________________________ 34 II.2 Các hàm xử lý trên danh sách ___________________________________________________ 34 1. FIRST và REST – CAR và CDR_________________________________________________ 34 2. CONS, APPEND, LIST________________________________________________________ 35 ii 3. NTHCDR, BUTLAST và LAST _________________________________________________ 36 4. LENGTH và REVERSE _______________________________________________________ 37 II.3 Thao tác trên Integer, Ratio, Floating-Point Numbers, ______________________________ 37 II.4 Lập trình hướng dữ liệu________________________________________________________ 38 1. ASSOC ____________________________________________________________________ 38 2. ACONS ____________________________________________________________________ 38 Chương III. Hàm và Biến cục bộ _______________________________________________ 40 III.1 Định nghĩa hàm – Chương trình đệ quy trong Lisp___________________________________ 40 III.2 Biến cục bộ _________________________________________________________________ 41 1. LET _______________________________________________________________________ 41 2. LET* ______________________________________________________________________ 42 Chương IV. Các vị từ và biểu thức điều kiện _____________________________________ 43 IV.1 Vị từ_______________________________________________________________________ 43 IV.2 Các phép so sánh: EQUAL, EQ, EQL và =_________________________________________ 43 IV.3 Vị từ MEMBER______________________________________________________________ 44 IV.4 Vị từ NULL và ENDP_________________________________________________________ 45 IV.5 Các vị từ xác định kiểu dữ liệu __________________________________________________ 45 IV.6 Các vị từ trên số______________________________________________________________ 47 IV.7 Các toán tử logic _____________________________________________________________ 48 1. AND ______________________________________________________________________ 48 2. OR ________________________________________________________________________ 49 3. NOT_______________________________________________________________________ 49 IV.8 Các dạng điều kiện ___________________________________________________________ 50 1. IF, WHEN và UNLESS________________________________________________________ 50 2. COND _____________________________________________________________________ 51 3. CASE______________________________________________________________________ 51 Chương V. Trừu tượng hóa dữ liệu ____________________________________________ 53 V.1 Các trường của một ký hiệu_____________________________________________________ 53 V.2 Doublets____________________________________________________________________ 53 1. Doublets____________________________________________________________________ 53 2. Pointed pair _________________________________________________________________ 54 3. Ký hiệu pointed pair __________________________________________________________ 54 4. Doublets trong LISP __________________________________________________________ 54 V.3 Lời gọi hàm tính toán _________________________________________________________ 55 1. Apply______________________________________________________________________ 55 2. Funcall_____________________________________________________________________ 55 V.4 Hàm vô danh ________________________________________________________________ 56 1. Lambda expression ___________________________________________________________ 56 2. Hàm vô danh và biến cục bộ ____________________________________________________ 56 Chương VI. Lặp trên số và trên danh sách _______________________________________ 57 VI.1 Các cấu trúc lặp ______________________________________________________________ 57 1. DOTIMES __________________________________________________________________ 57 iii 2. DOLIST Hỗ trợ lặp trên danh sách _______________________________________________ 57 3. DO tổng quát hơn DOLIST và DOTIMES _________________________________________ 59 VI.2 Các dạng đặc biệt_____________________________________________________________ 59 1. progn ______________________________________________________________________ 59 2. prog1 ______________________________________________________________________ 59 Chương VII. Các thao tác với tập tin __________________________________________ 61 VII.1 Lưu lại tập tin chương trình và dữ liệu ____________________________________________ 61 VII.2 Biên dịch tập tin______________________________________________________________ 61 VII.3 Debugging __________________________________________________________________ 61 Chương VIII. Cài đặt và sử dụng gcLisp ________________________________________ 63 VIII.1 Cài đặt___________________________________________________________________ 63 VIII.2 Startup Gclisp _____________________________________________________________ 63 VIII.3 Phím nóng________________________________________________________________ 63 VIII.4 Dòng lệnh ________________________________________________________________ 64 VIII.5 Lệnh tiền tố (Prefix command)________________________________________________ 64 VIII.6 Cửa sổ soạn thảo GMAC ____________________________________________________ 64 VIII.7 Load file vào gclisp_________________________________________________________ 64 PHẦN III. SMALLTALK_________________________________________________ 66 Chương I. LÝ THUYẾT VỀ OOP VÀ NGÔN NGỮ SMALLTALK ________________ 67 I.1 Lập trình hướng đối tượng (Object Oriented Programming) với Smalltalk ___________________ 67 1. Đối tượng (Object) - Các thành phần (member) của đối tượng: Các thuộc tính (properties) và các phương thức (methods) - Sự bao đóng (encapsulation). ____________________________________ 67 2. Khái niệm class - Mối quan hệ giữa object và class - Khái niệm instance. _________________ 67 3. Phương thức - Thông điệp (message) - Đối tượng nhận thông điệp (receiver). Đối số của thông điệp (argument)___________________________________________________________________ 68 4. Các loại thông điệp: unary, binary và keyword. Độ ưu tiên giữa các thông điệp. ____________ 69 5. Câu lệnh (statement) - kịch bản (script)____________________________________________ 70 6. Che giấu thông tin (hiding information) ___________________________________________ 71 7. Sự thừa kế (inheritance) - Che phủ (override) - Sự dẩn xuất (derivation) - Mối quan hệ giữa các đối tượng: cây các lớp. _____________________________________________________________ 71 8. Tính đa hình (polymorphism) - Sự ràng buộc muộn (late - binding)______________________ 72 I.2 Ngôn ngữ Smalltalk _____________________________________________________________ 72 1. Object trên Smalltalk. Thuộc tính thường và thuộc tính indexed. Các thành phần cho đối tượng và thành phần cho lớp ________________________________________________________________ 72 2. Các literal - object: Integer, Float, Character, Boolean, Array, String, Context _____________ 73 3. Khai báo biến - Ràng buộc về kiểu trên ngôn ngữ Smalltalk - Phát biểu gán - Phát biểu trả về _74 4. Định nghĩa một object mới. Các phương thức new và new: ____________________________ 75 5. Định nghĩa một class mới và phương thức mới - Sự biên dịch offline và online một phương thức 76 6. Bên trong phương thức - Các từ khóa self và super___________________________________ 76 7. Các phương thức primitive _____________________________________________________ 78 8. Khái niệm về MetaClass - Sử dụng MetaClass - Lập trình OOP động (dynamic) với Smalltalk 78 iv 9. Các lớp đặc biệt: Compiler, Window, ViewManager, Prompter _______________________ 79 I.3 Một số kỹ thuật lập trình căn bản trên Smalltalk _______________________________________ 79 1. Sự mô phỏng các cấu trúc điều khiển._____________________________________________ 79 2. Thao tác trên tập hợp (collection). Một số kỹ thuật xử lý trên tập hợp.____________________ 80 Chương II. HƯỚNG DẪN SỬ DỤNG VWIN VERSION 2.0 _______________________ 83 II.1 Hướng dẫn sử dụng chương trình VWIN: __________________________________________ 83 1. Thao tác trên hệ thống lớp______________________________________________________ 83 2. Lập trình ___________________________________________________________________ 85 3. Load và Save file. ____________________________________________________________ 88 4. Gỡ rối______________________________________________________________________ 88 II.2 Giới thiệu về một số lớp có sẳn của VWIN_________________________________________ 90 1. Lớp Object__________________________________________________________________ 90 2. Lớp Magnitude ______________________________________________________________ 91 3. Lớp Number, Integer, Float, Character ____________________________________________ 91 4. Lớp IndexedCollection:________________________________________________________ 91 5. Lớp Context: ________________________________________________________________ 94 Chương III. MỘT SỐ KỸ THUẬT LẬP TRÌNH CĂN BẢN VỚI LỚP COLLECTION TRÊN SMALLTALK - VÍ DỤ VÀ BÀI TẬP _______________________________________ 96 III.1 Sử dụng phương thức do: ______________________________________________________ 96 1. Ví dụ:______________________________________________________________________ 96 2. Bài tập đề nghị: ______________________________________________________________ 96 III.2 Sử dụng phương thức select: hoặc reject: __________________________________________ 97 1. Ví dụ:______________________________________________________________________ 97 2. Bài tập đề nghị_______________________________________________________________ 97 III.3 Sử dụng phương thức collect: ___________________________________________________ 97 1. Ví dụ:______________________________________________________________________ 97 2. Bài tập đề nghị: ______________________________________________________________ 98 III.4 Bài tập tổng hợp: _____________________________________________________________ 98 1. Ví dụ:______________________________________________________________________ 98 2. Bài tập đề nghị_______________________________________________________________ 98 PHẦN I. PROLOG Hướng dẫn sử dụng BProlog 2 Chương I. Vị từ (predicate) - Tư duy lập trình và định nghĩa vấn đề trên Prolog Đối với Prolog, một chương trình có thể hiểu như là các tri thức được người lập trình cung cấp cho hệ thống Prolog. Nhờ vào các kiến thức được cung cấp, hệ thống có thể trả lời được các câu hỏi được đặt ra, và câu trả lời có thể đạt được nhờ cơ chế suy luận của hệ thống dựa trên những kiến thức được cung cấp ban đầu. Đơn vị kiến thức mà người lập trình cung cấp cho Prolog gọi là các vị từ (predicate). Các vị từ dùng để biểu diễn các khái niệm mà người lập trình muốn hệ thống dùng để suy luận để đạt được các kiến thức khác mà mình mong muốn. Về mặt kỹ thuật, các predicate có thể được xem như các hàm, nhưng giá trị trả về chỉ có thể là các giá trị luận lý - đúng hoặc sai. Và giá trị trả về này chỉ có thể sử dụng để suy luận, Prolog không có cơ thế chồng chất hàm như các ngôn ngữ thủ tục khác, chính điều này sẽ làm những người quen với việc lập trình thủ tục gặp khó khăn khi bước đầu lập trình với Prolog. Công việc đầu tiên khi lập trình trên Prolog là định nghĩa các vị từ - các khái niệm mà mình cần cung cấp cho chương trình. Xét các ví dụ sau: VD1: Dữ kiện ban đầu: Mọi người đều ph ải chết. Socrates là người. Yêu cầu: Chúng ta muốn hệ thống phải có khả năng suy luận và trả lời được các vấn đề liên quan đến các khái niệm trên: ai là người, ai không là người, ai phải chết, ai không phải chết. Ở đây chúng ta có một sự suy luận thông minh đặc trưng cho sức mạnh của Prolog: hệ thống sẽ tự động suy luận rằng Socrates phải chết (điều không được cung cấp ban đầu). Để biểu diễn các vấn đề trên bằng ngôn ngữ Prolog, chúng ta cần phải xác định cần phải biểu diễn những khái niệm gì. Trong vấn đề này chúng ta có hai khái niệm cần biểu diễn: một thực thể nào đó có thể là người (hoặc không), và một thực thể nào đó có thể chết. Như vậy chúng ta biểu diễn vấn đề đầu tiên bằng ngôn ngữ Prolog như sau: nguoi(symbol) Symbol là một kiểu dữ li ệu đặc biệt của Prolog, dùng để biểu diễn cho một thực thể, một khái niệm tổng quát. Như vậy chúng ta vừa định nghĩa một khái niệm: một symbol nào đó có thể là người, một symbol nào khác thì không. Hiểu như một sự định nghĩa hàm, chúng ta có thể xem như định nghĩa một hàm mang tên nguoi, hàm này có thông số một biến thuộc kiểu dữ liệu symbol, và kết quả của hàm này, Hướng dẫn sử dụng BProlog 3 không cần phải khai báo thuộc về kiểu gì, vì chỉ có thể thuộc kiểu boolean, chỉ có thể đúng hoặc sai. Nhiệm vụ của Prolog là phải trả lời được với giá trị symbol nhập vào, thì hàm này cho ra kết quả đúng hoặc sai, tức symbol ấy có phải là người hay không. Prolog chỉ có thể làm được điều này nếu như nếu như chúng ta cung cấp cho hệ thống một cơ chế suy luận đúng đắ n, tức là giải thích được cho Prolog hiểu như thế nào là người? Tương tự như vậy, chúng ta định nghĩa về vấn đề một thực thể nào đó phải chết bằng vị từ sau chet(symbol) Như vậy với bài toán đã nêu, chúng ta sẽ đặt ra hai vị từ nguoi(symbol) chet(symbol) VD2: Yêu cầu: tính giá trị giai thừa của một số nguyên bất kỳ. Bài toán trên không cho biết dữ kiện ban đầu. Chúng ta phả i cung cấp các dữ kiện ban đầu, để Prolog có thể dựa vào đó để suy luận, để từ đó hệ thống có thể giải quyết được yêu cầu của chúng ta. Việc cung cấp dữ kiện ban đầu cho hệ thống là rất quan trọng quyết định vấn đề giải quyết yêu cầu của chúng ta. Một trong những cách giải quyết có thể được lựa chọn là chúng ta sẽ cho hệ thố ng biết giá trị giai thừa của toàn bộ số nguyên: giai thừa của 0 là 1, giai thừa của 1 là 1, giai thừa của 2 là 2, giai thừa của 3 là 6, giai thừa của 4 là 24… Dễ dàng nhận thấy rằng cách này là không khả thi, và trong thực tế, con người cũng không tiếp thu tri thức theo cách này. Chúng ta có thể cung cấp dữ kiện cho hệ thống theo cách khác: giai thừa của một số là tích các số từ 1 đến số đó. Như vậy với cách giải quy ết này, chúng ta có hai khái niệm cần phải cung cấp: giai thừa của một số là gì, và tích của các số nguyên tính từ 1 đến một số là gì? Cách đặt vấn đề này có thể giải quyết được bài toán, tuy nhiên chúng ta có thể đặt vấn đề theo một cách khác đơn giản, và hợp với tinh thần của Prolog hơn: giai thừa của 0 là 1, và giai thừa của một số lớn hơn 0 là giai thừa của số liền trước nó nhân với chính nó. V ới cách đặt vấn đề này, chúng ta chỉ có một khái niệm phải biểu diễn: giai thừa của một số là gì? (thật ra chúng ta còn một số khái niệm phải đưa ra: một số đứng trước một số là gì, nhân hai số nghĩa là gì, tuy nhiên Prolog đã cung cấp các toán tử để giải quyết vấn đề này. Hiểu theo một nghĩa nào đó, các vấn đề trên là các tiên đề, không cần phải giải thích với hệ thố ng.) Nếu quen với ngôn ngữ lập trình thủ tục, chúng ta có khuynh hướng diễn tả khái niệm giai thừa như sau: giaithua(integer) Ở đây cách đặt vấn đề như vậy là không thích hợp với ngôn ngữ Prolog, vì Hướng dẫn sử dụng BProlog 4 . Một vị từ chỉ có thể trả lời là đúng hoặc sai, trong khi chúng ta đang mong muốn kết quả trả về theo cách khai báo này một số . Ngôn ngữ Prolog không có sự chồng chất hàm, nghĩa là kết quả của hàm (vị từ) không thể dùng như một thông số cho một vị từ khác, trong khi chúng ta đang định dùng kết quả của hàm này để tính tiếp giá trị cho một hàm khác.(Chúng ta định dùng hàm này để tính giai thừa của n -1 , rồ i nhân tiếp cho n để ra kết quả cuối cùng). Vị từ thích hợp sẽ như sau: giaithua(integer,integer) Điều này, hiểu theo ngôn ngữ thủ tục, nghĩa là chúng ta khai báo một hàm có thông số là hai số nguyên, và kết quả trả về sẽ là đúng hoặc sai. Điều chúng ta muốn diễn tả có nghĩa là: giai thừa của một số nguyên (integer) sẽ là một số nguyên khác. Nếu chúng ta giải thích được cho Prolog hiểu giai thừa của mộ t số nguyên sẽ được tính như thế nào, hệ thống sẽ có khả năng trả lời cho cả câu hỏi thuận (giai thừa của một số nguyên là gì), câu hỏi nghịch (số nguyên nào có giai thừa bằng số nguyên này), và nghi vấn (giai thừa của một số nguyên X có phải là số nguyên Y hay không). Tuy nhiên mục đích của chúng ta chỉ cung cấp các dữ kiện để hệ thống có thể trả lời câu hỏi thuận (và có thể tr ả lời thêm câu hỏi nghi vấn) mà thôi. Tóm tắt: . Lập trình trên Prolog là cung cấp cho hệ thống các khái niệm và diễn giải các khái niệm đó. . Các khái niệm được cung cấp qua các vị từ. . Các vị từ có thể xem như các hàm như chỉ trả về giá trị đúng hoặc sai. . Việc hệ thống có thể trả lời được những câu hỏi nào liên quan đến khái niệm đã cung cấp phụ thuộc vào việc chúng ta diễ n giải các khái niệm trên cho hệ thống Hướng dẫn sử dụng BProlog 5 Chương II. Các clause, cách giải thích các vấn đề trên Prolog Sau khi đã cung cấp cho hệ thống các khái niệm cần thiết, chúng ta cần phải giải thích các khái niệm mình đã cung cấp, Prolog sẽ dùng các lời giải thích này để thực hiện việc suy luận và trả lời câu hỏi của chúng ta. Các lời giải thích này được gọi là các mệnh đề (clauses). Có hai dạng mệnh đề: sự kiện (fact), và luật ( rule) Các sự kiện là những điều mà chúng ta công nhận là đúng. Luật là những quy tắc mà chúng ta xác định điều kiện đúng cho chúng. VD3: hãy viết phần clause cho vị từ nguoi đã định nghĩa trong VD1 Dữ kiện ban đầu chỉ cung cấp cho chúng ta một vấn đề liên quan đến người: Socrates là người. Theo như cách tư duy trong không gian của bài toán, chỉ có một con người duy nhất: Socrates. Không ai khác là người. Như vậy chúng ta sẽ viết phần clause cho vị từ này như sau: nguoi(socrates). Chúng ta vừa viết một sự kiện: socrates là người là điề u chắc chắn đúng. Bất kỳ symbol nào có tên là socrates là người là chắc chắn đúng, không cần phải có một điều kiện ràng buộc nào kèm theo. Lưu ý: i/ Có hai cách viết dạng hằng (literal) cho symbol trên Prolog: Một danh hiệu mở đầu bằng ký tự thường (socrates, sOCRATES…) Một chuỗi ký hiệu đặt trong cặp ký hiệu ‘’ (‘socrates’,’SOCRATES’,’ sOCRATES’, ‘Socrates’…) ii/ Một mệnh đề luôn kết thúc bằng ký tự '.' VD4: hãy viết phần clause cho vị từ chet trong VD1. Dữ ki ện ban đầu chỉ cung cấp cho chúng ta một sự kiện liên quan đến vấn đề này: symbol sẽ phải chết nếu (và chỉ nếu) đó là người. Điều này sẽ xác định một quy tắc: symbol sẽ chỉ phải chết, tức vị từ sẽ trả về kết quả true, nếu symbol đó là người. Vấn đề symbol nào là người và symbol nào không là người chúng ta đã đưa ra khái niệm và giải thích cho Prolog trong các ví dụ 1 và 3. Nh ư vậy phần mệnh đề sẽ được viết như sau; chet(X):-nguoi(X). Mệnh đề dạng rule sẽ bao gồm hai phần, nằm ở hai bên cặp ký hiệu ":-". Phần bên trái cho biết vị từ đang được đề cập và các thông số tương ứng. Phần bên phải, xác định điều kiện trả lời đúng cho luật trên, bao gồm các lời gọi các vị từ khác, được ngăn cách bởi ký hiệ u ',', gọi [...]... Chương III Môi trường lập trình B-Prolog Trước khi thực thi các chương trình viết bằng ngôn ngữ Prolog ở trên, chúng ta cần phải chọn một môi trường lập trình cụ thể Trong môn học này, chúng ta sẽ sử dụng phần mềm lập trình B-Prolog (http://www.cad.mse.kyutech.ac.jp/people/zhou/bprolog.html) của Neng-Fa Zhou làm công cụ lập trình cho ngôn ngữ Prolog Phần này đầu tiên sẽ giới thiệu sơ lược về B-Prolog: cách... việc khó khăn khi thực hiện phép lặp Tuy nhiên ví dụ này cũng cho thấy một kỹ thuật lập trình tạo nên sức mạnh chủ yếu của Prolog: lập trình đệ quy Kỹ thuật này cũng phù hợp với suy nghĩ của con người khi tiếp cận giải quyết vấn đề và khiến cho việc lập trình trên Prolog có một sự uyển chuyển và nhẹ nhàng trong việc viết mã Tuy vậy, nó tạo ra một sự khó khăn với những người quen lập trình thủ tục Chúng... π⎞ ⎛ Bt sin ⎜ 3 x + ⎟ viết trong Lisp như thế nào ? (sin (+ (* 3 x )(/ pi 2 ))) 2⎠ ⎝ Lisp là ngôn ngữ thông dịch (interpreted language) (xem Error! Reference source not found.) Ngôn ngữ thông dịch Ngôn ngữ biên dịch Biểu thức câu lệnh (instructions) đánh giá biên dịch trả lời chương trình thực thi Kết quả thực thi kết quả vòng lặp top-level Ví dụ: 31 ... yes nếu thành công và no nếu việc thực thi chương trình thất bại Nếu trong câu hỏi có chứa biến và việc thực thi thành công thì chương trình sẽ thông báo cho chúng ta giá trị ràng buộc với các biến đó Chúng ta có thể yêu cầu hệ thống tìm thêm lời giải khác bằng cách gõ dấu ; và enter sau lời giải đã biết III.3 Gỡ rối chương trình (debugging) 8 Hướng dẫn sử dụng BProlog Để gỡ rối cho một chương trình Prolog... định ra một ngôn ngữ Lisp chung nhất đã hình thành – dự án này sẽ kết hợp những đặc tính tốt nhất của các hệ Lisp thời đó vào một thể thống nhất Điều đó đã dẫn đến sự ra đời phiên bản đầu tiên của Common Lisp chuẩn năm 1984 – kết hợp nhiều ý tưởng của ngôn ngữ lập trình như thông dịch và biên dịch hàm, dọn rác (garbage collection), gọi hàm đệ quy, theo vết và dò lỗi (tracing and debugging) và trình soạn... của X 11 Hướng dẫn sử dụng BProlog Chương IV Thực thi chương trình - Đặt câu hỏi và nhận câu trả lời Đến đây chúng ta đã có thể sử dụng B-Prolog để viết và thực thi các chương trình đơn giản viết bằng ngôn ngữ Prolog VD6: Viết chương trình hoàn chỉnh cho VD1 Sử dụng một công cụ soạn thảo văn bản đơn giản (không có định dạng) bất kỳ, nhập vào nội dung chương trình hoàn chỉnh cho VD1 như sau: nguoi(‘Socrates’)... ra, B-Prolog còn có thể liên kết với ngôn ngữ C, C++, Java; hỗ trợ lập trình đồ họa cũng như cho phép lập trình ràng buộc (Constraint Logic Programming) trên nó Trong B-Prolog, chúng ta không cần phải khai báo tường minh các vị từ như Turbo Prolog mà chúng ta chỉ cần viết các mệnh đề để giải thích về vấn đề quan tâm III.2 Cài đặt và làm việc với B-Prolog Tải chương trình B-Prolog từ địa chỉ và giải nén... thêm về phần lập trình đệ quy trên Prolog trong các phần sau Tóm tắt Các khái niệm được mô tả qua các vị từ sẽ được giải thích bằng các mệnh đề Có hai loại mệnh đề: sự kiện và luật Thông số được truyền trong lời gọi các mệnh đề con phải là biến Các kỹ thuật chủ yếu để lập trình trên Prolog là hợp nhất và đệ quy 6 Hướng dẫn sử dụng BProlog Chương III Môi trường lập trình B-Prolog Trước khi thực thi... dữ liệu và một số vị từ có sẵn Phần tiếp theo sẽ trình bày cách sử dụng B-Prolog để viết các chương trình ví dụ đơn giản III.1 Giới thiệu sơ nét về B-Prolog B-Prolog ngoài việc hỗ trợ viết các chương trình bằng ngôn ngữ Prolog chuẩn còn cung cấp một môi trường cho phép người sử dụng có thể nạp (consult, load), dịch (compile), debug và thực thi chương trình Đặc biệt là môi trường này cho phép sử dụng... là out Để thực thi một file trong B-Prolog chúng ta phải nạp các file đã được dịch này vào bộ nhớ bằng lệnh load(file-name) Một cách để kết hợp cả giai đoạn dịch và nạp này là sử dụng lệnh consult(file-name) hoặc đơn giản là gõ [filename] ở dấu nhắc lệnh Sau khi nạp chương trình, chúng ta có thể thực thi chương trình thông qua các câu hỏi (query) Với mỗi câu hỏi hệ thống sẽ thực thi chương trình và . THỰC HÀNH NGÔN NGỮ LẬP TRÌNH TPHCM, Tháng 12 – 2005 i Mục lục PHẦN I. PROLOG _______________________________________________________ 1 Chương I. Vị từ (predicate) - Tư duy lập trình. hàm như các ngôn ngữ thủ tục khác, chính điều này sẽ làm những người quen với việc lập trình thủ tục gặp khó khăn khi bước đầu lập trình với Prolog. Công việc đầu tiên khi lập trình trên Prolog. chủ yếu để lập trình trên Prolog là hợp nhất và đệ quy. Hướng dẫn sử dụng BProlog 7 Chương III. Môi trường lập trình B-Prolog Trước khi thực thi các chương trình viết bằng ngôn ngữ Prolog