Giáo trình Nhập môn trí tuệ nhân tạo potx

116 1.1K 7
Giáo trình Nhập môn trí tuệ nhân tạo potx

Đ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

Giáo trình Nhập mơn trí tuệ nhân tạo TRƯỜNG ĐẠI HỌC ĐÀ LẠT KHOA TỐN –TIN Trương Chí Tín GIÁO TRÌNH NHẬP MƠN TRÍ TUỆ NHÂN TẠO Đà Lạt, 04 - 2009 LỜI MỞ ĐẦU Giáo trình “Nhập mơn Trí tuệ nhân tạo” viết dành cho sinh viên ngành Tốn – Tin, Tin học Cơng nghệ thơng tin Để đọc giáo trình này, sinh viên cần có kiến thức lôgic, cấu trúc liệu thuật tốn Nội dung giáo trình gồm chương: Chương 1: Khái niệm trí tuệ nhân tạo Chương 2: Các phương pháp giải vấn đề Chương 3: Biểu diễn xử lý tri thức Chương 4: Lập trình lơgic Chương giới thiệu tóm tắt lịch sử hình thành phát triển khái niệm chung nhất, lĩnh vực nghiên cứu ứng dụng trí tuệ nhân tạo Chương trình bày phương pháp biểu diễn giải vấn đề bản: biểu diễn vấn đề không gian trạng thái đồ thị thông thường, đồ thị VÀ/HOẶC, phương pháp xác định trực tiếp lời giải, phương pháp thử – sai (trong trình bày phương pháp tìm kiếm theo chiều rộng, chiều sâu, theo hướng cực tiểu giá thành đồ thị, thuật giải di truyền, phương pháp GPS, …) kỹ thuật heuristic Chương đề cập đến phương pháp biểu diễn tri thức bằng: lôgic, luật sinh, mạng ngữ nghĩa, khung phương pháp xử lý tri thức suy diễn dựa lôgic tất định bất định Chương giới thiệu kỹ thuật lập trình lơgic thơng qua ngơn ngữ lập tình Prolog Cuối chương có phần tập nhằm củng cố kiến thức lý thuyết rèn luyện kỹ thực hành cho học viên Các phần in chữ nhỏ dành cho học viên đọc thêm Chắc chắn tài liệu không tránh khỏi sơ suất, tác giả mong nhận chân thành biết ơn ý kiến đóng góp q báu bạn đồng nghiệp độc giả nhằm làm cho giáo trình hồn chỉnh lần tái sau Đà lạt, 04 - 2009 Tác giả MỤC LỤC Lời mở đầu CHƯƠNG I KHÁI NIỆM VỀ TRÍ TUỆ NHÂN TẠO I.1 Lược sử hình thành phát triển I.2 Những lĩnh vực nghiên cứu trí tuệ nhân tạo (TTNT) I.3 Những ứng dụng TTNT CHƯƠNG II CÁC PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ II.1 Các phương pháp xác định trực tiếp lời giải II.1.1 Phương pháp giải xác II.1.2 Phương pháp giải gần II.1.3 Phương pháp giải không tường minh, đệ qui II.1.4 Phương pháp qui hoạch động II.2 Các phương pháp thử – sai II.2.1 Phương pháp vét cạn, nguyên lý mắt lưới, phương pháp sinh thử, phương pháp nhánh cận a Phương pháp vét cạn b Nguyên lý mắt lưới c Phương pháp sinh thử d Phương pháp nhánh cận II.2.2 Phương pháp ngẫu nhiên a Phương pháp Monte - Carlo b Thuật giải di truyền GA II.2.3 Nguyên lý mê cung II.2.4 Các phương pháp biểu diễn giải vấn đề không gian trạng thái đồ thị a Biểu diễn vấn đề khơng gian trạng thái b Phương pháp tìm kiếm lời giải c Các dạng đặc biệt thường gặp: tìm kiếm theo chiều rộng, chiều sâu, sâu dần, cực tiểu AT II.2.5 Quy toán toán chiến lược tìm kiếm đồ thị VÀ / HOẶC a Quy toán toán b Biểu diễn toán dạng đồ thị VÀ / HOẶC c Các phương pháp tìm kiếm VÀ / HOẶC: 8 8 11 13 13 13 14 15 16 17 17 18 20 22 22 27 28 32 32 33 tìm kiếm theo chiều rộng, chiều sâu, cực tiểu II.2.6 Phương pháp GPS II.3 Kỹ thuật Heuristic II.3.1 Các thuật giải tìm kiếm tối ưu đồ thị với tri thức heuristic a Thuật giải AKT b Thuật giải A* c Các ví dụ II.3.2 Nguyên lý tham lam II.3.3 Nguyên lý hướng đích, phương pháp leo núi II.3.4 Nguyên lý thứ tự, nguyên lý trùng khớp Bài tập CHƯƠNG III BIỂU DIỄN VÀ XỬ LÝ TRI THỨC III.1 Khái niệm biểu diễn xử lý tri thức III.1.1 Từ liệu đến tri thức III.1.2 Một số đặc trưng tri thức III.1.3 Phân loại tri thức III.1.4 Các phương pháp biểu diễn tri thức III.1.5 Các phương pháp xử lý diễn tri thức III.2 Một số phương pháp biểu diễn tri thức III.2.1 Biểu diễn tri thức nhờ lôgic III.2.2 Biểu diễn tri thức nhờ luật sinh 63 III.2.3 Biểu diễn tri thức nhờ mạng ngữ nghĩa III.2.4 Biểu diễn tri thức Frame III.3 Xử lý tri thức tất định phương pháp suy diễn lôgic III.3.1 Các chế lập luận với tri thức tất định III.3.2 Thuật toán Vương Hạo III.3.3 Thuật toán Robinson III.3.4 Thuật toán suy diễn tiến III.3.5 Thuật toán suy diễn lùi III.4 Xử lý tri thức bất định phương pháp suy diễn logic III.4.1 Các chế lập luận với tri thức bất định không xác III.4.2 Phân bố khả xuất khái luật phép toán nối kết chúng Bài tập 34 40 42 44 44 44 45 48 51 52 55 59 59 60 60 60 60 61 61 64 64 65 65 65 69 72 74 78 78 78 79 CHƯƠNG IV LẬP TRÌNH LƠGIC IV.1 Giới thiệu ngơn ngữ lập trình lơgic Prolog 80 IV.1.1 Mở đầu 80 IV.1.2 Vị từ, kiện, qui tắc, mục tiêu Prolog 81 IV.1.3 Cấu trúc chương trình Prolog 83 IV.2 Danh sách, đệ qui, lát cắt Prolog 87 IV.2.1 Danh sách 87 IV.2.2 Đệ qui, chế quay lui tìm nghiệm bội Prolog 87 IV.2.3 Lát cắt Prolog 89 IV.3 Các ví dụ 92 IV.3.1 Bài toán “Tháp Hà Nội” 92 IV.3.2 Bài toán xử lý vi phân ký hiệu 93 IV.3.3 Bài tốn suy luận lơgic 94 IV.4 Phụ lục: Vài vị từ chuẩn Prolog 96 Bài tập 105 Tài liệu tham khảo 110 Chương – Khái niệm Trí tuệ nhân tạo Chương I KHÁI NIỆM VỀ TRÍ TUỆ NHÂN TẠO I.1 Lược sử hình thành phát triển * Trí tuệ nhân tạo (TTNT hay AI – Artificial Intelligence) ngành lĩnh vực cơng nghệ thơng tin Có nhiều quan điểm trí tuệ nhân tạo - Năm 1950, Alan Turing đưa “trắc nghiệm thông minh” để nhận biết máy tính có thơng minh hay khơng Tuy vậy, theo ơng ta, máy tính thất bại trắc nghiệm thơng minh thơng minh - Theo quan điểm Minsky, trí tuệ nhân tạo ngành khoa học nhằm nghiên cứu, mơ máy tính hành vi tư thông minh tương tự người Nó giúp máy tính có khả nhận thức, suy luận phản ứng Có hai hướng tiếp cận trí tuệ nhân tạo: dùng máy tính để bắt chước trình xử lý người thiết kế máy tính thơng minh độc lập với cách suy nghĩ người - Từ điển bách khoa toàn thư Webster định nghĩa: “Trí tuệ khả năng: Phản ứng cách thích hợp với tình thơng qua hiệu chỉnh hành vi cách thích đáng; Hiểu rõ mối liên hệ qua lại kiện giới bên nhằm đưa hành động phù hợp để đạt tới mục đích đó” - Theo nhà tâm lý học nhận thức q trình hoạt động trí tuệ người bao gồm thao tác bản: Xác định tập đích (goal) cần đạt tới; Thu thập kiện (facts) luật suy diễn (inference rules) để đạt tới tập đích đặt ra; Thu gọn (prunning) trình suy luận nhằm xác định cách nhanh chóng tập luật suy diễn sử dụng để đạt tới đích trung gian đó; Áp dụng chế suy diễn (tiến lùi) cụ thể (inference mechanisms), dựa thao tác thu gọn trình suy luận kiện trung gian tạo ra, để dẫn dắt từ kiện ban đầu đến đích đặt * TTNT đời dựa thành ngành tâm lý học nhận thức, lơgic hình thức, … Từ 2000 năm trước, nhà triết học tâm lý Chương – Khái niệm Trí tuệ nhân tạo học cố gắng tìm hiểu cách thức, chế trình nhớ, học tập, nhận thức suy lý - Vào đầu năm 50 kỷ XX, nhờ đời cải tiến liên tục hiệu suất hoạt động máy tính, xuất xu hướng khơng nghiên cứu trí tuệ mặt lý thuyết mà kiểm nghiệm kết lý thuyết thơng minh máy tính Trong thời gian đầu hình thành, nhiều cơng trình lý thuyết TTNT chưa kiểm nghiệm triển khai thực tế chưa có ngơn ngữ lập trình đặc trưng cho TTNT, hạn chế kỹ thuật máy tính, giới hạn nhớ đặc biệt tốc độ thực vấn đề bùng nổ tổ hợp nảy sinh thuật tốn tìm kiếm lời giải cho tốn khó TTNT - Dựa thành kỹ thuật phần cứng, với xuất ngơn ngữ lập trình đặc thù cho TTNT, chuyên xử lý ký hiệu hình thức phục vụ cho lập trình lơgic IPL.V, LISP (viết tắt LISt Processing, Mc Cathy đại học MIT đề xuất năm 1960), PLANNER, PROLOG (viết tắt PROgramming in LOGic, Alain Colmerauer nhóm cơng ông đại học Marseilles xây dựng năm 1972), nhiều giả thuyết hay kết thú vị lý thuyết TTNT có điều kiện kiểm nghiệm trở thành sản phẩm tin học cụ thể thị trường mang tính thơng minh, hoạt động nhóm chuyên gia nhiều kinh nghiệm lĩnh vực hẹp y học, địa chất, dạy – học, chơi cờ, Chẳng hạn sản phẩm, chương trình: dẫn xuất kết luận hệ hình thức, chứng minh định lý hình học phẳng, tính tích phân bất định, giải phương trình đại số sơ cấp, chơi cờ (Samuel), phân tích chữa bệnh tâm lý (ELIZA), chuyên gia y khoa (MYCIN đại học Stanford), phân tích tổng hợp tiếng nói, điều khiển Robot theo đồ án “Mắt - tay”, thăm dị khống sản (PROSPECTOR) Khi sử dụng sản phẩm chuyên dụng thông minh này, đặc biệt lần đầu tiên, ta khơng khỏi ngạc nhiên tính “thơng minh” đến mức đơi ta có cảm giác chúng vượt trội hẳn khả người không chuyên nghiên cứu lĩnh vực đặc thù - Trong năm 1990, ngành TTNT phát triển mạnh theo hướng: sở tri thức hệ chuyên gia, xử lý ngôn ngữ tự nhiên, lý thuyết nhận dạng hình ảnh, tiếng nói ứng dụng vào kỹ thuật đa phương tiện, siêu văn bản, mạng nơron, máy học, lý thuyết mờ lập luận xấp xỉ, lập trình tiến hố, khai thác tri thức từ liệu, * Có vài dấu hiệu quan trọng trí tuệ máy khả năng: học; mô hành vi sáng tạo người; trừu tượng hóa, tổng qt hóa suy diễn; tự giải thích hành vi; thích nghi với tình gồm khả thu Chương – Khái niệm Trí tuệ nhân tạo nạp liệu tích hợp, rút tri thức từ liệu; xử lý biểu diễn hình thức (các ký hiệu tượng trưng, danh sách); vận dụng tri thức heuristics sẵn có; xử lý thơng tin bất định, khơng đầy đủ, khơng xác, Trí tuệ máy khác trí tuệ người chỗ khơng thể nhìn trước phần hay tồn thể q trình giải tình khơng tự sinh heuristics thân chúng * TTNT gồm phương pháp kỹ thuật sau: phương pháp biểu diễn giải vấn đề; kỹ thuật heuristics; phương pháp biểu diễn xử lý tri thức; phương pháp học nhận dạng, xử lý ngơn ngữ tự nhiên ngơn ngữ lập trình cho TTNT TTNT kế thừa kỹ thuật tin học truyền thống như: xử lý danh sách, kỹ thuật đệ qui quay lui, cú pháp hình thức, Trong hệ thống TTNT có thành phần liên quan mật thiết với nhau: phương pháp biểu diễn vấn đề tri thức, phương pháp tìm kiếm khơng gian tốn, chiến lược thu hẹp không gian lời giải suy diễn I.2 Những lĩnh vực nghiên cứu trí tuệ nhân tạo I.2.1 Từ thuật toán đến thuật giải * Đặc trưng thuật tốn (Algorithm): u cầu thỏa mãn nghiêm ngặt tính chất: xác định, hữu hạn, đắn Ưu điểm: tốn giải thuật tốn có độ phức tạp không đa thức áp dụng tốt thực tế Nhược điểm: thuật tốn có phức tạp đa thức áp dụng với không gian toán nhỏ; thực tế, lớp toán khó chưa có thuật tốn giải chưa biết thuật toán giải hiệu rộng nhiều Một hướng để giải khó khăn mở rộng tính xác định, tính đưa vào thêm thơng tin đặc trưng tốn, đưa vào máy tính kiểu kinh nghiệm “tư duy” người ước lượng, để thu thuật giải heuristic * Đặc trưng thuật giải heuristic: độ phức tạp bé, cho phép nhanh chóng tìm lời giải, khơng phải ln ln tìm mà tìm thấy lời giải đa số trường hợp; vả lại, lời giải chưa hay tối ưu mà thường gần hay gần tối ưu I.2.2 Phân loại phương pháp giải vấn đề * Biểu diễn vấn đề: Xét vấn đề: A → B Chương – Khái niệm Trí tuệ nhân tạo - Dạng chuẩn: Cho A, B tìm → (hai loại thuật tốn, chương trình: thuật tốn cần xác định trước → thuật tốn tổng qt để tìm →) - Cho A, →, tìm B (suy diễn tiến) - Cho B, →, tìm A (suy diễn lùi) * Nhóm phương pháp xác định trực tiếp lời giải: phương pháp xác, phương pháp xấp xỉ gần đúng, phương pháp không tường minh, đệ qui, nguyên lý qui hoạch động * Nhóm phương pháp xác định gián tiếp lời giải tìm kiếm lời giải: - Phương pháp thử – sai: vét cạn, nguyên lý mắt lưới, phương pháp nhánh cận, sinh thử lời giải, phương pháp ngẫu nhiên (phương pháp Monte – Carlo, thuật giải di truyền GA), nguyên lý mê cung (dạng đệ qui), vét cạn dần (dưới dạng lặp) cách quay lui xác định dần thơng tin tốn q trình giải thơng qua cấu trúc khơng tuyến tính (chẳng hạn: cây, đồ thị đồ thị VÀ/HOẶC phương pháp tìm kiếm: theo chiều rộng, sâu, sâu dần, cực tiểu AT), phương pháp GPS, … - Phương pháp heuristic trí tuệ nhân tạo: hướng tiếp cận quan trọng để xây dựng hệ thống TTNT Nó bao gồm phương pháp kỹ thuật tìm kiếm có sử dụng tri thức đặc biệt từ thân lớp toán cần giải nhằm rút ngắn trình giải nhanh chóng đến kết mong muốn khơng chắn cách giải tối ưu lại có tính khả thi điều kiện thiết bị có thời gian yêu cầu Trong kỹ thuật người ta thường sử dụng kỹ thuật heuristis định lượng thông qua hàm đánh giá Chúng ta minh họa phương pháp heuristics thông qua phương pháp vét cạn thông minh (tìm kiếm tối ưu bổ sung tri thức đặc trưng toán đồ thị tổng quát: AKT, A*), nguyên lý tham lam, nguyên lý hướng đích (thuật giải leo núi), nguyên lý thứ tự, nguyên lý khớp nhất, … Những thông tin heuristic gián tiếp đưa vào máy tính thơng qua người Vậy máy tính tự tạo “tri thức”, biết suy luận, chứng minh, tự học qua kinh nghiệm, máy có khả rút tri thức vận dụng chúng vào việc giải tốn hay khơng ? Các phương pháp trí tuệ nhân tạo giúp máy tính thực chừng mực vấn đề đặt trên: phương pháp biểu diễn 96 IV.4 PHỤ LỤC: VÀI VỊ TỪ CHUẨN CỦA PROLOG IV.4.1 NHẬP VÀ XUẤT DỮ LIỆU Các vị từ xuất nhập liệu xét thao tác từ thiết bị vào thời, ngầm định hình bàn phím Các vị từ nhập liệu Các ký hiệu sử dụng biểu diễn cú pháp vị từ có ý nghĩa sau: Sau tên vị từ biến có kiểu liệt kê Sau đó, dịng vào biến vị từ ra, biến có vị trí tương ứng với ký tự: ‘o’ phải biến tự (sau vị từ thực kết qủa gán vào biến này); ‘i’ phải biến ràng buộc đối tượng (chúng cung cấp liệu ban đầu để vị từ thực hiện) a) readln(StringVariable), (string) – (o): StringVariable biến tự có kiểu string Vị từ có tác dụng đọc chuỗi từ thiết bị vào thời (và tất nhiên gán cho biến StringVariable) gặp ký tự xuống dịng (phím Enter, có mã ASCII tương ứng ‘\13’) ấn b) readint(IntgVariable), (integer) – (o): đọc số nguyên từ thiết bị vào thời gặp ký tự xuống dòng ấn c) readreal(RealVariable), (real) – (o): đọc số thực từ thiết bị vào thời gặp ký tự xuống dòng ấn d) readchar(CharVariable), (char) – (o): đọc ký tự (nhưng khơng xuất ký tự hình) từ thiết bị vào thời không cần kết thúc ký tự xuống dòng e) file_str(DosFileName, StringVariable), (string, string) – (i, o) (i, i): chuyển đổi nội dung văn file có tên thực DosFileName biến chuỗi có tên StringVariable (cho đến gặp ký tự kết thúc file eof, tương ứng với tổ hợp phím Ctl-z hay mã ASCII ‘\26’) f) inkey(CharVariable), (char) – (o): đọc ký tự từ bàn phím (gán cho biến CharVariable) Vị từ có ký tự ấn từ bàn phím g) keypressed: kiểm tra việc phím bấm hay chưa không đọc ký tự vào Vị từ có ký tự ấn từ bàn phím 97 h) keypressed: kiểm tra việc phím bấm hay chưa không đọc ký tự vào Vị từ có ký tự ấn từ bàn phím Các vị từ xuất liệu a) write(Variable|Constant * ): dấu * biến Variable (ràng buộc) hay Constant lặp lại chúng viết cách dấu phẩy ‘,’ Vị từ có tác dụng xuất đến thiết bị số đối tượng b) nl: xuống dòng c) writef(FormatString, Variable|Constant *): xuất số đối có định khn dạng theo cú pháp sau: %-m_p$, đó: ‘-’: canh lề bên trái, khơng có dấu ‘-’ canh lề bên phải; ‘m’: xác định độ rộng vùng nhỏ cho đối; ‘p’: xác định độ xác số sau dấu chấm thập phân hay số lớn ký tự in chuỗi; ‘$’ ký hiệu quy ước chuẩn: d: số thập phân dạng chuẩn x: số thập lục phân s: chuỗi (symbols hay strings) c: ký tự (chars hay integers) g: số thực dạng ngắn ngầm định e: số thực dạng mũ f: số thực dạng dấu phẩy động d) “\n”: ký tự xuống dòng “\t”: ký tự lùi vào số khoảng trắng “\nnn”: ký tự đưa vào bảng mã ASCII tương ứng IV.4.2 CÁC THAO TÁC FILE a) openread(SymbolicFileName, DosFileName), (file, string) – (i, i): mở file đĩa DosFileName để đọc gán cho tên file hình thức (trong phần khai báo kiểu file) SymbolicFileName b) openwrite(SymbolicFileName, DosFileName), (file, string) – (i, i): mở file đĩa để ghi gán cho tên file hình thức; file tồn xóa trước gọi c) openappend(SymbolicFileName, DosFileName), (file, string) – (i, i):mở file đĩa để nối thêm liệu gán cho tên file hình thức 98 d) openmodify(SymbolicFileName, DosFileName), (file, string) – (i, i):mở file đĩa để sửa đổi (đọc ghi) gán cho tên file hình thức Khi dùng vị từ này, nên kết hợp với vị từ filepos để cập nhật file vị trí tùy chọn e) readdevice(SymbolicFileName), (file) – (i) (o): đặt lại hay hiển thị thiết bị đọc vào file mở (để đọc hay sửa đổi), ngầm định bàn phím f) writedevice(SymbolicFileName), (file) – (i) (o): đặt lại hay hiển thị thiết bị ghi vào file mở (để đọc ghi nối thêm hay sửa đổi), ngầm định hình g) closefile(SymbolicFileName), (file) – (i): đóng file (dù mở hay chưa) h) filepos(SymbolicFileName, FilePosition, Mode), (file, real, integer) – (i, i, i) (i, o, i): đưa trỏ đến hay trả lại giá trị vị trí FilePosition file tính từ chế độ Mode: 0: đầu file, 1: vị trí file, 2: cuối file i) eof(SymbolicFileName), (file) – (i): kiểm tra trỏ có cuối file hay khơng Vị từ trỏ vị trí cuối file j) existfile(DosFileName), (string) – (i): vị từ thành công file có tên tồn thư mục thời k) deletefile(DosFileName), (string) – (i): xóa file có tên l) renamefile(OldDosFileName, NewDosFileName), (string, string) – (i, i): đổi tên file cũ thành tên file m) disk(DosPath), (string) – (i) (o): thiết lập hay trả lại ổ đĩa đường tìm kiếm thư mục mặc định IV.4.3 CÁC THAO TÁC ĐỐI VỚI MÀN HÌNH VÀ CỬA SỔ Màn hình Màu Giá trị Màu chữ Giá trị Black Black Blue 16 Blue Green 32 Green Cyan 48 Cyan Red 64 Red Magenta 80 Magenta Brown 96 Brown 99 White 112 White Grey Light Blue Light Green 10 Light Cyan 11 Light Red 12 Light Magenta 13 Yellow 14 White (High Intensity) 15 a) attribute(Attr), (integer) – (i) (o): cho (đặt hay trả lại) giá trị thuộc tính hình Giá trị đặc trưng cho thuộc tính hình, dựa vào bảng đây, tính sau: Chọn màu chữ màu nền; Cộng giá trị nguyên tương ứng với màu bảng 1; Cộng thêm giá trị với 128 muốn chữ hiển thị nhấp nháy b) scr_char(Row, Column, Char), (integer, integer, char) – (i, i, i) (i, i, o): cho ký tự Char hình vị trí có tọa độ (Row, Column) c) scr_attr(Row, Column, Char), (integer, integer, char) – (i, i, i) (i, i, o): cho thuộc tính hình vị trí có tọa độ (Row, Column) d) filed_str(Row, Column, Length, String), (integer, integer, integer, string) – (i, i, i, i) (i, i, i, o): cho chuỗi String hình vùng bắt đầu vị trí có tọa độ (Row, Column) có độ dài Length ký tự e) filed_attr(Row, Column, Length, Attr), (integer, integer, integer, integer) – (i, i, i, i) (i, i, i, o): cho thuộc tính hình vùng bắt đầu vị trí có tọa độ (Row, Column) có độ dài Length ký tự f) cursor(Row, Column), (integer, integer) – (i, i) (i, o): dịch trỏ đến vị trí có tọa độ (Row, Column) hay trả lại tọa độ trỏ thời Hệ thống cửa sổ a) makewindow(WindowNo, ScrAtt, FrameAtt, FrameStr, Row, Column, Height, Width), (integer, integer, integer, string, integer, integer, integer, integer) – (i, i, i, i, i, i, i, i) (o, o, o, o, o, o, o, o): xác định vùng hình làm cửa sổ 100 b) makewindow(WindowNo, ScrAtt, FrameAtt, FrameStr, Row, Column, Height, Width, ClearWindow, FrameStrPos, BorderChars), (integer, integer, integer, string, integer, integer, integer, integer, integer, integer, string) – (i, i, i, i, i, i, i, i, i, i) (o, o, o, o, o, o, o, o, o, o): xác định vùng hình làm cửa sổ với thuộc tính sau: ClearWindow = khơng xóa cửa sổ sau tạo, = xóa cửa sổ sau tạo; FrameStrPos = 255 canh tít giữa, 255 đặt tít vị trí FrameStrPos; BorderChars chuỗi gồm ký tự để vẽ khung: ký tự thứ 1: góc bên trái, ký tự thứ 2: góc bên phải, ký tự thứ 3: góc bên trái, ký tự thứ 4: góc bên phải, ký tự thứ 5: đường kẻ ngang, ký tự thứ 6: đường kẻ dọc c) shiftwindow(WindowNo), (integer) – (i) (o): đổi cửa sổ làm việc đến cửa sổ thứ WindowNo (vẫn giữ nguyên trạng thái cửa sổ trước đó) hay trả lại số cửa sổ làm việc d) gotowindow(WindowNo), (integer) – (i): di chuyển nhanh đến cửa sổ thứ WindowNo mà không lưu nội dung cửa sổ cũ vào đệm cửa sổ e) resizewindow: điều chỉnh lại kích thước cửa sổ kiểu thực đơn f) resizewindow(StartRow, NoOfRows, StartCol, NoOfCols), (integer, integer, integer, integer) – (i, i, i, i): điều chỉnh lại kích thước cửa sổ cách trực tiếp g) colorsetup(Main_Frame), (integer) – (i): thay đổi màu cửa sổ hay khung tùy theo giá trị của: Main_Frame = đổi màu cửa sổ = đổi màu khung h) existwindow(WindowNo), (integer) – (i): vị từ thành công tồn cửa sổ số WindowNo i) removewindow: loại bỏ cửa sổ thời j) removewindow(WindowNo, Refresh), (integer, integer) – (i, i): loại bỏ cửa sổ số WindowNo với chế độ xóa hay khơng xóa (nếu Refresh 0) k) clearwindow: xóa cửa sổ thời màu 101 l) window_str(ScreenString), (string) – (i) (o): chuyển đổi nội dung cửa sổ thời chuỗi ScreenString m) window_at(Attribute), (integer) – (i): xác định thuộc tính cho cửa sổ thời n) scroll(NoOfRows, NoOfCols), (integer, integer) – (i, i): cuộn nội dung cửa sổ lên (hay xuống) X=NoOfRows dịng tùy theo > (hay < 0) sang trái (hay phải) X=NoOfCols cột tùy theo > (hay < 0) o) framewindow(FrameAttr), (integer) – (i): thay đổi thuộc tính khung cửa sổ p) framewindow(FrameAttr, FrameStr, FrameStrPos, FrameTypeStr), (integer, string, integer, integer) – (i, i, i, i): thay đổi thuộc tính khung cửa sổ theo chế độ sau: FrameAttr = thuộc tính khung FrameStr = tít khung FrameStrPos = nhận giá trị từ đến độ rộng cửa sổ Nó đặt vị trí cho tít khung Tít đặt 255 FrameTypeStr = chuỗi gồm ký tự để dạng khung IV.4.4 CÁC VỊ TỪ CHUẨN KHÁC Thao tác chuỗi a) frontchar(String, FrontChar, RestString), (string, char, string) – (i, o, o) (i, i, o) (i, o, i) (i, i, i) (o, i, i): tách chuỗi thành ký tự đầu chuỗi lại b) fronttoken(String, Token, RestString), (string, string, string) – (i, o, o) (i, i, o) (i, o, i) (i, i, i) (o, i, i): tách chuỗi thành ‘từ’ chuỗi lại c) frontstr(Length, InpString, StartString, RestString), (integer, string, string, string) – (i, i, o, o): tách từ chuỗi cho trước InpString chuỗi StartString ký tự thứ có độ dài Length chuỗi cịn lại RestString d) concat(String1, String2, String3), (string, string, string) – (i, i, o) (i, o, i) (o, i, i) (i, i, i): nối String1 String2 thành String3: String3 = String1 + String2 e) strlen(String, Length), (string, integer) – (i, i) (i, o) (o, i): chiều dài String Length Với dòng vào (o, i) ta chuỗi gồm Length ký tự trắng 102 f) isname(StringParam), (string) – (i): kiểm tra chuỗi có ‘name’ (một dãy ký tự chữ số dấu ‘_’ bắt đầu chữ hay ký tự ‘_’ Turbo Prolog không Chuyển đổi kiểu a) char_int(CharParam, IntgParam), (char, integer) – (i, o) (o, i) (i, i): chuyển đổi ký tự mã ASCII tương ứng với b) str_int(StringParam, IntgParam), (string, integer) – (i, o) (o, i) (i, i): chuyển đổi chuỗi số nguyên tương ứng với c) str_char(StringParam, CharParam), (string, char) – (i, o) (o, i) (i, i): chuyển đổi chuỗi ký tự tương ứng với d) str_real(StringParam, RealParam), (string, real) – (i, o) (o, i) (i, i): chuyển đổi chuỗi số thực tương ứng với e) upper_lower(StringInUpperCase, StringInLowerCase), (string, string) – (i, o) (o, i) (i, i): chuyển đổi chuỗi ký tự hoa chuỗi ký tự thường f) upper_lower(CharInUpperCase, CharInLowerCase), (char, char) – (i, o) (o, i) (i, i): chuyển đổi ký tự hoa ký tự thường Thao tác dối với sở liệu a) consult(DosFileName), (string) – (i): gọi bổ sung file sở liệu (file khởi tạo lưu sở liệu không tên vị từ save(?)) b) consult(DosFileName, InternalDatabaseName), (string, InternalDatabaseName) – (i, i): gọi bổ sung file sở liệu (file khởi tạo lưu sở liệu không tên vị từ save(?, ?)) c) save(DosFileName), (string) – (i): lưu mệnh đề sở liệu không tên d) save(DosFileName, InternalDatabaseName), (string, InternalDatabaseName) – (i, i): lưu mệnh đề sở liệu có tên e) assert(Term), (InternalDatabaseDomain) – (i) hay asserta(Term), (InternalDatabaseDomain) – (i): chèn kiện vào đuôi sở liệu không tên f) assertz(Term), (InternalDatabaseDomain) – (i): chèn kiện vào đuôi sở liệu không tên 103 g) retract(Term), (InternalDatabaseDomain) – (_): vị từ không tất định (nondeterm) loại bỏ kiện sở liệu không tên h) retract(Term, InternalDatabaseDomain), (InternalDatabaseDomain) – (_, i): vị từ không tất định (nondeterm) loại bỏ kiện sở liệu có tên i) retractall(Term), (InternalDatabaseDomain) – (_): vị từ loại bỏ kiện sở liệu không tên Nên sử dụng biến vô danh vị từ Vị từ không sai j) retractall(_, InternalDatabaseDomain), (_, InternalDatabaseDomain) – (_, i): vị từ loại bỏ kiện sở liệu có tên Nên sử dụng biến vơ danh vị từ Các lệnh liên quan đến hệ điều hành DOS a) system(DosCommandString), (string) – (i): thực lệnh hệ điều hành DOS môi trường Turbo Prolog b) dir(Path, Filespec, Filename), (string, string, string) – (i, i, o): xem files thư mục chọn file menu để xem nội dung c) exit: chương trình trở mơi trường làm việc Prolog Các lệnh linh tinh khác a) random(RealVariable), (real) – (o): tạo số ngẫu nhiên thực khoảng [0, 1) b) random(MaxValue, RandomInt), (integer, integer) – (i, o): tạo số nguyên ngẫu nhiên khoảng [0, RandomInt) c) sound(Duration, Frequency), (integer, integer) – (i, i): tạo âm có trường độ Duration tần số Frequency d) beep: tạo tiếng còi ngắn e) date(Year, Month, Day), (integer, integer, integer) – (o, o, o) (i, i, i): cho ngày, tháng, năm đồng hồ hệ thống f) time(Hours, Minutes, Seconds, Hundredths), (integer, integer, integer, integer) – (o, o, o, o) (i, i, i, i): cho đồng hồ hệ thống g) trace(on/off), (string) – (o) (i): đặt chế độ lần vết hay khơng cho chương trình h) findall(Variable, Atom, ListVariable): ghi giá trị biến Atom trùng tên với Variable vào danh sách ListVariable i) not(Atom): vị từ có giá trị logic phủ định vị từ Atom Lưu ý: không dùng biến tự vị từ Atom 104 j) free(Variable): vị từ Variable biến tự k) bound(Variable): vị từ Variable biến ràng buộc l) fail: vị từ luôn sai m) true: vị từ ln ln n) Các phép tốn số học Turbo Prolog: +, -, *, /, mod, div o) Các phép toán quan hệ Turbo Prolog (có giá trị khơng số mà ký tự, chuỗi, symbol): >, =, < p) Các hàm Turbo Prolog: sin, cos, tan, arctan, ln, log, exp, sqrt, round (số nguyên làm tròn), trunc (số nguyên chặt cụt), abs 105 BÀI TẬP CHƯƠNG IV (Phần tập làm quen với vị từ Prolog) Bài 1: Xét gia phả sau: Bà2 Ông2 Bà1 Bố1 Mẹ2 Chú Bố2 Mẹ1 Dì Contrai1 Congái1 Contrai3 Contrai2 Congái2 Congái3 Cây mô tả vị từ quan hệ sau: cha(Cha, Con), mẹ(Mẹ, Con), nam(DO), nữ (DB) Hãy liệt kê quan hệ lại như: anhEm(Ng1, Ng2), con(Con, Cha, Mẹ), chú(Chú, Cháu), bà(Bà, Cháu), anhEmHọ(Ng1, Ng2) từ vị từ Suy mối quan hệ hai người Bài 2: Một dịch vụ du lịch phục vụ chuyến tuần tuần Rome, London, Tunis Trong sách giới thiệu dịch vụ du lịch, với địa điểm có giá lại (tùy vào thời gian chuyến đi) chi phí cho tuần, tùy vào địa điểm mức độ tiện nghi: khách sạn, nhà trọ, cắm trại trời a) Nhập vào kiện mô tả sách (giá bạn nhập vào) b) Hãy mô tả quan hệ ChuyếnĐi(TP, SốTuần, TiệnNghi, ChiPhí) c) Mơ tả quan hệ ChuyếnĐi_ÍtTốnKém(TP, SốTuần, TiệnNghi, ChiPhí, ChiPhíMax) cho chi phí chuyến thấp ChiPhíMax Bài 3: Trong dịch vụ tư vấn nhân, liệt kê danh sách cặp xứng đôi làm quen theo nhận định sau: - nam(n, t, c, a), nữ(n, t, c, a) n: tên; t: chiều cao c: màu tóc (vàng, hung, nâu, hạt dẻ) a: tuổi (trẻ, trung niên, già) 106 - SởThích(n, m, l, s) (sở thích) có nghĩa là: Người n thích loại nhạc m (classique, pop, jazz), thích văn học loại l (phiêu lưu, văn học viễn tưởng, trinh thám), chơi môn thể thao s(quần_vợt, bơi, chạy bộ) - tìm(n, t, c, a): Người n tìm bạn có tính chất t, c, a Hai người x y gọi hợp có ngoại hình (t, c, a) sở thích về: l, m, s a) Nhập liệu khách hàng b) Mô tả qui tắc hợp_ngoạihình(x, y) cùng_sở thích(x, y) c) Viết chương trình xác định cặp xứng đơi (Phần tập danh sách, đệ qui, lát cắt) Bài 4: Xây dựng vị từ đệ quy (có không sử dụng nhát cắt sửa đổi phần đuôi đệ quy, có thể) để: a) Tìm (hoặc xóa) phần tử thứ 1, thứ 2, phần tử cuối danh sách b) Tìm (hoặc lấy ra) phần tử danh sách trùng với giá trị cho trước c) Tìm lấy tất phần tử danh sách trùng với giá trị cho trước d) Tính giá trị trung bình cộng danh sách kiểu số thực e) Xuất tất cặp phần tử danh sách f) Tạo danh sách tất phần tử vị trí chẵn danh sách liệu L: • Giữ nguyên trật tự xuất L • Đảo ngược trật tự g) Viết chương trình trộn(u, v, w) nhận xen kẽ phần u v để tạo thành danh sách w h) Tạo danh sách chứa số chẵn danh sách số nguyên cho trước i) Đảo ngược trật tự phần tử danh sách j) Xuất hoán vị phần tử danh sách cho trước k) Xây dựng vị từ Thuộc có thêm đối để trả trị TRUE phần tử x thuộc danh sách l cho trước FALSE trường hợp ngược lại l) Xây dựng qui tắc NằmNgồi(x, L) để kiểm tra xem x khơng thuộc danh sách L m) Xây dựng qui tắc KhácNhau(L) để kiểm tra danh sách L khơng có phần tử trùng n) Xây dựng qui tắc PhầnĐầu(m, L) để kiểm tra danh sách m phần đầu danh sách L o) Xây dựng qui tắc NằmTrongLiênTiếp(m, L) để kiểm tra phần tử m nằm liên tiếp danh sách L 107 p) Xây dựng qui tắc PhânHoạch(L, u, v, w) để phân hoạch danh sách L thành danh sách u, v, w q) Thêm phần tử vào cuối danh sách r) Tìm xóa phần tử thứ k danh sách l cho trước s) Chèn phần tử x sau phần tử thứ k danh sách L (0

Ngày đăng: 02/08/2014, 01:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan