Tài liệu Đề cương môn học THNNLT (First draft) PHẦN I: PROLOG - Pdf 90

Đề cương môn học THNNLT
(First draft)

PHẦN I: PROLOG

Tiết 1:
GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH PROLOG (lý thuyết)

Tiết 2:
Giới thiệu tổng quan về PROLOG

Sinh viên cần nắm được các nội dung sau:
• Môi trường làm việc của PROLOG
• Cách định nghĩa vấn đề trong PROLOG: vị từ
• Cách biểu diễn vấn đề trong PROLOG: các sự kiện, luật
• Các chương trình ví dụ
• Cách đặt câu hỏi và nhận câu trả lời trong PROLOG
• Phân biệt Goal nội và goal ngoại

Bài tập / bài thực hành:
1/ Làm quen với môi trường làm việc của PROLOG 2.0
2/Định nghĩa một số khái niệm, sự kiện và luật trong PROLOG:

a/Socrates là người. Socrates là người Hy Lạp. Aristottle là người. Xeda là
người. Xeda là vua. John là vua của nước Pháp.
b/John likes Mary. Mary likes John. Joe likes fish. Joe likes Mary. Mary likes
book. John likes book. Mary is female.
c/ Xây dựng quan hệ gia đình(parent, child, grandparent, aunt) theo sơ đồ sau:

d/Nếu có mưa thì tôi sẽ sử dụng dù. Nếu X là người thì X sẽ chết. X là chim
nếu X là sinh vật(aninal) và X có lông vũ. X là chị(em gái) của Y nếu X là phụ

Sinh viên cần nắm các nội dung sau:
• Các đối tượng dữ liệu: atom, numbers, variables, structes
• Phép so trùng(matching)
• Ý nghĩa của các khai báo trong Prolog
• Prolog trả lời các câu hỏi như thế nào

Bài tập / bài thực hành:
1/Trong những đối tượng sau, đối tượng nào đúng theo ngữ pháp của Prolog? Chúng
thuộc loại đối tượng gì (cơ bản, số, biến, cấu trúc)?
Diana, diana, ’Diana”, _diana, “Diana goes South”, goes(diana, south), 45, 5(X,Y),
+(north, west), three( Black(Cats)
2/Trong các phép so trùng(matching) sau, phép so sánh nào thành công(succeed) và
biến nào(nếu có) sẽ hợp nhất với giá trị nào?
pilots(A,london) = pilots(london,paris)
point(X,Y,Z) = point (X1,Y1,Z1)
letter(C) = word(letter)
‘vicar’ = vicar
point(A,B) = point(1,2)
point(A,B) = point(X,Y,Z)
plus(2,2) = 4
+(2,D) = +(E,2)
3/Xây dựng cấu trúc dữ liệu cho các đối tượng hình tam giác, chữ nhật, hình vuông,
hình tròn
4/Giả sử cấu trúc dữ liệu của một tứ giác là rectangle(P1,P2,P3,P4) với P là các đỉnh
của tứ giác. Hãy định nghĩa quan hệ
regular(R) cho kết quả là true nếu R là tứ giác có các cạnh thẳng đứng song song với
trục tung và nằm ngang đều song song với trục hoành.
5/Cho chương trình sau:
f(1,one).
f(s(1),two).

• Cách biểu diễn một danh sách
• Các thao tác trên danh sách
• Các phép toán số học(arithmetic)

Bài tập / bài thực hành:
1/Viết vị từ conc để nối
hai danh sách.
2/
a/Dùng vị từ conc đã viết ở câu 1, viết 1 goal để xóa 3 phần tử cuối của danh sách L
b/Viết một dãy các goal để xóa 3 phần tử đầu tiên và 3 phần tử cuối cùng của danh
sách L
3/Định nghĩa quan hệ last(Item, List) biểu diễn quan hệ Item là phần tử cuối của
danh sách L bằng 2 cách: dùng conc và không dùng conc.
4/Viết 2 vị từ:
evenlength(List) và oddlength(List)
trả về true nếu thông số của chúng là 1 danh sách có chiều dài là một số chẳn(lẻ)
tương ứng.
VD: [a,b,c,d] là evenlength còn [a,b,c] là oddlength
5/Định nghĩa quan hệ reverse(List, ReverseList) dùng để đảo ngược danh sách List
thành danh sách ReverseList
VD: reverse([a,b,c,d].[d,c,b,a])
6/Viết vị từ palindrome(List) trả về true nếu List là một danh sách đối xứng
7/ Định nghĩa quan hệ shift(L1,L2) để dịch chuyển 1 phần tử trong L1 vòng sang trái
tạo thành L2
Ví dụ: shift([1,2,3,4],L1) -> L1=[2,3,4,1]
8/Định nghĩa quan hệ translate(L1,L2) để chuyển đổi danh sách số nguyên(từ 0 đến
9) L1 thành danh sách các từ tương ứng L2.
Ví dụ: translate([3,5,1,3],[ba,nam,mot,ba])
9/Định nghĩa quan hê subset(Set,Subset) với Set và Subset là 2 tập hợp để kiểm tra
Subset có là tập con của Set không cũng như để tìm các tập con có thể có của Set.

Bài tập / bài thực hành:
1/ Viết vị từ nthmember(N, List, X) trả về true nếu X là phần tử thứ N trong danh
sách List.
2/ Cho chương trình sau:
p(1).
p(2):-!.
p(3).
Hãy viết tất cả các câu trả lời của Prolog khi đặt các câu hỏi sau:
a/p(X).
b/p(X),p(Y).
c/p(X),!,p(Y).

3/Quan hệ sau sẽ xác định một số nguyên(Number) nhập vào sẽ là số dương(positive),
âm(negative) hay là số không(zero):
class(Number, positive) :- Number > 0.
class(0, zero).
class(Number, negative) :- Number < 0.
Hãy sử dụng (các) nhát cắt để làm tăng tính hiệu quả của quan hệ này.

4/ Viết vị từ split(Numbers, Positives, Negatives) để tách một danh sách số nguyên
Numbers thành 2 danh sách: Positives (chứa các số >=0) và Negatives (chứa các số <
0). Hãy viết thành 2 phiên bản: có và không sử dụng nhát cắt.
5/ Hãy định nghĩa quan hệ hiệu của hai tập hợp:
difference(Set1,Set2,SetDifference)
Tất cả các tập hợp sẽ được biểu diễn dưới dạng danh sách
Ví dụ:
difference([a,b,c,d], [b,d,e,f], [a,c]).

Tài liệu tham khảo:


7/Thực thi đoạn script biểu thức sau trên cả hai phiên bản của Smalltalk:
(3 + 6) < (6 * 2)
8/Thực thi tất cả các ví dụ có trong tài liệu lý thuyết trong cả hai môi trường
Smalltalk/V và Smalltalk 2000.

Tiết 8:
Đối tượng(Object) và thông điệp(Messages)

Sinh viên cần nắm các nội dung sau:
• Các đối tượng đơn giản
• Các thông điệp đơn giản
• thông điệp unary, keyword, binary (bao gồm cả các thông điệp toán học)
• thông điệp lồng nhau
• Các biến tạm và biến toàn cục
• Các biểu thức
• Cách ghi chú

Bài tập / bài thực hành:

1/Hãy biểu diễn biểu thức 5+2-3/(2*3 - 5) và cho biết kết quả tính toán của smalltalk
với biểu thức này
2/Hãy tính căn bậc hai của biểu thức trên
4/Hãy tính bình phương của biểu thức trên
5/Trong smalltalk có phép chia nguyên và phép chia dư không? Nếu có, chúng có tên
là gì? thuộc lớp nào?
6/Làm thế nào để sử dụng các phép logic(and, or, not…) trong smalltalk. Hãy biểu
diễn biểu thức: (delta >= 0) and (a <> 0) trong smalltalk
7/Làm thế nào để khai báo một đối tượng thuộc một lớp nào đó trong smalltalk. Hãy
tạo mới một đối tượng a thuộc lớp Array có 4 phần tử.
8/Hãy cho biết đối tượng #(1 (‘two ‘three’) 4) là đối tượng thuộc lớp gì trong

4/ Viết phương thức giaithua cho lớp Integer để tính giai thừa cho một số nguyên n.
5/ Viết phương thức tìm ước số chung lớn nhất của hai số nguyên a và b
6/ Viết chương trình tìm bội số chung nhỏ nhất của hai số nguyên a và b
7/ Viết phương thức tính số hạng thứ n của dãy Fibonaci.
8/ Viết phương thức dem cho lớp String để đếm số ký tự là chữ hoa trong đối tượng
nhận thông điệp.
9/ Viết phương thức tach cho lớp String để tạo ra chuỗi s1 là những ký tự trong s có
mã ASCII chia hết cho vị trí của ký tự đó trong s(đối tượng nhận thông điệp).
10/ Viết phương thức cộng để cộng hai vector
11/ Viết phương thức tich để tính tích vô hướng của hai vector.
12/ Viết phương thức sort để sắp xếp thứ tự của một dãy.
13/ Viết chương trình(script) giaiptbac1 có 2 đối số là a, b(có xét trường hợp a =0)
14/ Viết chương trình giải phương trình bậc hai
15/ Viết chương trình tính diện tích tam giác khi biết ba cạnh
16/ Viết chương trình tính diện tích và chu vi hình tròn khi biết bán kính.
17/ Viết phương thức để tính định thức của ma trận vuông

Tiết 10:
Các lớp(Classes) và phương thức(Methods) _ Tính thừa kế(inheritance) và
tính đa hình(Polymorphism)

Sinh viên cần nắm các nội dung sau:
• Khái niệm lớp và phương thức
• Cách duyệt cây phân cấp lớp
• Biến “self”, đối tượng “nil”
• Tạo đối tượng mới
• Biến thực thể tên và biến thực thể chỉ số(index instance variables), biến lớp
• thêm phương thức mới, phương thức lớp
• Sự thừa kế (cả về phương thức lẫn biến)
• Tính đa hình

Ngoài ra chúng ta còn tạo thêm một lớp mới là Prioritizer

2. Project Overview
Dự án mà chúng ta sẽ xây dựng là một chương trình nhỏ cho phép
người sử dụng nhập vào một danh sách các item theo thứ tự bất kỳ, sau đó
chương trình sẽ giúp ta sắp xếp lại các item này theo mức độ quan trọng từ cao
đến thấp hay ngược lại. Nói cách khác, thay vì sử dụng các phép so sánh toán
học “lớn hơn”, “nhỏ hơn” cổ điển có sẵn trong một số lớp của Smalltalk/V, dự
án Prioritizer sẽ sử dụng các phép so sánh do người dùng định nghĩa. Điều này
cũng giống như trong thực tế, chúng ta thường phải ra nhiều quyết định khác
nhau trong cuộc sống hằng ngày. Ứng dụng Prioritizer này sẽ hỗ trợ chúng ta
ra quyết định giữa hai hay nhiều chọn lựa khác nhau bằng cách xem xét đến
từng giá trị có thể có của mỗi lựa chọn khi so sánh chúng với nhau.

3. Thiết kế
Xét ở mức độ đơn giản nhất thì dự án này sẽ chỉ có nhiệm vụ chính là
chuyển đổi một thực thể của lớp Collection thành một thực thể của lớp
SortedCollection. Chúng ta sẽ thêm vào một số ràng buộc khác vào thiết kế
này để đáp ứng được yêu cầu là ứng dụng hoàn chỉnh phải có nhiều thành
phần khác nhau. Cụ thể là chúng ta sẽ phải xây dựng các thành phần để:
• cho phép người sử dụng nhập các item cần được sắp xếp độ ưu
tiên
• yêu cầu người sử dụng xếp loại (rank) các cặp trong danh sách
các item và trả lời câu hỏi ứng với mỗi cặp phần tử: “phần tử
này lớn hơn hay nhỏ hơn phần tử kia?”
• hiển thị danh sách kết quả đã được sắp xếp.
• “gắn” (làm cho có thể truy xuất được) ứng dụng vào trong
System menu và Demo menu
4. Xây dựng dự án
Chúng ta sẽ bắt đầu việc xây dựng dự án này bằng cách xây dựng một

Do chúng ta không cần phải tính toán, đánh giá các câu trả lời do
người sử dụng nhập vào nên ta loại phương thức thứ hai ra khỏi danh sách các
phương thức sẽ sử dụng.
Phương thức đầu tiên và phương thức thứ ba có tác dụng gần giống
nhau. Tuy nhiên phương thức promptWithBlanks:default: quan tâm đến các
khoảng trắng(space) mà người sử dụng vô tình nhập vào cửa sổ prompter. Do
việc này không cần thiết đối với dự án này nên chúng ta sẽ sử dụng phương
thức đơn giản hơn là prompt:default:.
Tóm lại, bây giờ chúng ta sẽ xử lý quá trình giao tiếp với người sử
dụng thông qua một thực thể của lớp Prompter mà cụ thể là ta sẽ sử dụng
phương thức prompt:default: của lớp này để nhận vào danh sách các items từ
phía người sử dụng để sắp xếp.

4.2. Tạo một Prompter
Hãy mở cửa sổ Workspace trong môi trường Smalltalk/V và nhập đoạn
code sau đây:

|anotherItem|
anotherItem := Prompter prompt:
‘Something to prioritize? (or leave blank)’
default: ‘’.
^anotherItem

Sau đó, chọn(highlight) đoạn mã này và chọn show it từ ô menus. Kết
quả sẽ giống như trong hình
Comment: Chèn một cái hình
vào đây


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status