You are on page 1of 51

Trường Đại học Công Nghệ Thông Tin, ĐHQG-HCM

Khoa Công Nghệ Phần Mềm

Chương 5: Đặc tả hàm

PGS.TS. Vũ Thanh Nguyên

4/5/2019 PGS.TS. Vũ Thanh Nguyên 1


CuuDuongThanCong.com https://fb.com/tailieudientucntt
Nội dung

 Tổng quan về hàm


 Đặc tả hàm không tường minh
 Đặc tả hàm tường minh
 Đặc tả đệ quy và sử dụng hàm phụ
 Một số cấu trúc điều khiển

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
2
Tổng Quan Về Hàm

 Hàm là một khái niệm trừu tượng toán học: là ánh xạ giữa hai
tập giá trị.
 function_name: domain → range, ở đó

function_name: tên của hàm


domain: miền xác định của tập giá trị mà ở đó hàm có thể
ứng dụng
range: phạm vi xác định của tập giá trị mà ở đó hàm chứa
đựng kết quả của ứng dụng hàm.
giữa domain và range cách nhau bằng →
 Nếu miền xác định có từ 2 giá trị trở lên, cần dùng dấu

gcd: N1xN1 → N1

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
3
Tổng Quan Về Hàm

 Định nghĩa hàm.


Hàm có thể được định nghĩa nhờ vào các phép toán và hằng số
 Ví dụ:

Hàm định nghĩa trực tiếp (tường minh) của bình phương
square: Z → N
square(i) ≜ i*i
Hàm xác định giá trị tuyệt đối
abs: Z → N
abs(i) ≜ if i<0 then –i else i

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
4
Tổng Quan Về Hàm

 Hàm chia hết


divides: N1 N → B
divides(i,j) ≜ j mod i = 0
Sử dụng toán tử dạng infix i divides j

Hàm xác định số chẵn


is-even: N → B
is-even(i) ≜ 2 divides i
Hàm xác định số lẻ
is-odd: N → B
is-odd(i) ≜ ¬is-even(i)

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
5
Tổng Quan Về Hàm

 Hàm ước số chung của 2 số


is-common-divisor: N N N1 → B
is-common-divisor(i,j,d) ≜ d divides i d divides j

Hàm xác định giá trị nhỏ hơn 3


less-than-three: N → B
less-than-three(i) ≜ i<3

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
6
Tổng Quan Về Hàm

 Hàm xác định số nguyên tố


is-prime: N → B
is-prime(i) ≜ i 1 d N1 d divides i d=1 d=i
hoặc có thể định nghĩa
is-prime(i) ≜ i 1 d {2,…,i-1} ¬(d divides i)

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
7
Các phép tổng quát trên ngôn ngữ VDM

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
8
Đặc tả hàm

 Ví dụ:
 Hàm luỹ thừa có thể được xác định bằng phương pháp

tường minh bằng hàm exponent_x như sau:


exponent_x: Z N→Z
exponent_x(x,n) ≜
if n=0
then 1
else x exponent_x(x,n-1)

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
9
Đặc tả hàm

 Ví dụ:
 Hàm luỹ thừa củng có thể được xác định bằng phương

pháp không tường minh như sau:


EXPONENT(x:Z, n:N)y:Z
pre true
post y=xn

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
10
Đặc tả hàm không tường minh

 Đặc tả hàm không tường minh (implicit definition):


 Đặc tả hàm không tường minh mô tả cái được tính toán

thay vì định nghĩa trực tiếp vấn đề, chúng ta không phải chỉ
ra kết quả được tính toán như thế nào.
 Có nhiều nguyên nhân để chúng ta phải đặc tả không tường

minh. Có lẽ nguyên nhân rõ ràng nhất là đặc tả thưởng


ngắn gọn hơn so với định nghĩa cụ thể.
 Đặc tả không tường minh thường có ý nghĩa chính xác với

bài toán mong muốn hơn so với đặc tả tường minh (hay cài
đặt).

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
11
Đặc tả hàm không tường minh

 Đặc tả hàm không tường minh (implicit definition):


 Vấn đề ý nghĩa nhất là có một đặc tả bao trùm từ cài ngắn

gọn nhất đến cái được đem mô tả để cài đặt.


 Toàn bộ miền này trở nên rõ ràng hơn khi đối tượng dữ liệu

được áp dụng trong đặc tả.


 Một trong những thuận lợi của tìm kiếm một đặc tả là nó có

thể mô tả đầy đủ miền giá trị bao trùm cho cài đặt.
 Đặc tả không tường minh là cách lưu trữ lại yêu cầu chức

năng mà không cần bận tâm đến phương thức cụ thể của
tính toán. Tính chất khác của đặc tả là nó có thể mô tả các
thuộc tính của kết quả cần thiết sao cho người dùng dễ hiểu
nhất.

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
12
Đặc tả hàm không tường minh

 Đặc tả hàm không tường minh (implicit definition):


 Đặc tả không tường minh phải thỏa toàn bộ các tính chất

mà người dùng mong muốn trả về kết quả đúng nhất từ đặc
tả.

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
13
Đặc tả hàm không tường minh

 Đặc tả hàm không tường minh (implicit definition):


 Phát biểu trạng thái hệ thống trước và sau khi thực hiện

hàm
 Không cần nêu ra các bước để thực hiện xử lý trong hàm

tên_hàm (thamsố1: Kiểu1, thamsố2: Kiểu2…) kq: Kiểukq


pre Vị từ pre-condition
post Vị từ post-condition

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
14
Đặc tả hàm không tường minh

 Định nghĩa tên hàm, tên và kiểu của các tham số đầu vào, tên
và kiểu của kết quả trả về (tham số đầu ra)
 Vị từ Pre-condition và Post-condition là biểu thức điều kiện
logic, có thể có giá trị là true hoặc false.
 Biểu thức điều kiện có thể chứa một hoặc nhiều vị từ. Các

từ được liên kết bởi các phép liên kết logic, lượng từ và có
thể chứa đựng hàm, tham số, hằng số và biến
 Xác định Vị từ Pre-condition để phát biểu điều kiện về giá trị
của các tham số đầu vào
 Xác định Vị từ Post-condition để phát biểu mối quan hệ giữa
các tham số đầu vào với kết quả trả về của hàm

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
15
Đặc tả hàm không tường minh

 Các phép liên kết logic của vị từ Pre-condition và Post-


condition
 - và
 - hoặc
 - nếu và chỉ nếu (if and only if)
 - kéo theo
 - với mọi
 - tồn tại
 ¬ - nó không phải là trường hợp

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
16
Đặc tả hàm không tường minh

 Theo cấu trúc chuẩn của đặc tả hàm không tường minh:
 Mỗi hàm có tối đa 1 kết quả trả về

 Các tham số đầu vào đều là dạng read-only (tham trị)

 Vấn đề: Làm cách nào đặc tả hàm cần trả về nhiều nội dung

thông tin?
 Giải pháp: Định nghĩa kiểu cấu trúc để chứa tất cả các thành phần
thông tin sẽ trả về (Chương 6)
 Giải pháp khác???

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
17
Đặc tả hàm không tường minh

 Hàm được gọi là không tường minh vì vị từ post-condition


không có sự giải thích cách thực hiện thuật toán không thể
tự động tính được giá trị đầu ra từ vị từ post-condition đối với
các giá trị đầu vào được cho.

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
18
Đặc tả hàm không tường minh

 Các ưu điểm của đặc tả hàm không tường minh


 Sự miêu tả trực tiếp các tính chất mà người sử dụng quan

tâm
 Mô tả một tập các kết quả có thể bởi vị từ post-condition

 Giá trị tường minh (giá trị true hoặc false) của vị từ pre-

condition
 Ít xem xét tới đặc tả thuật toán

 Dự kiến cho tên của kết quả

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
19
Đặc tả hàm không tường minh

 Ví dụ:
max_of_set (s: ℕ-set) r: ℕ
pre s {}
post (r s) ( n s n r)

 Ví dụ:
abs (z: ℤ) r: ℕ
pre true
post ((r = z) (z 0))
((r = -z) (z < 0))

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
20
Đặc tả hàm không tường minh

 Ví dụ: hàm tính ước số chung lớn nhất bằng phương pháp
không tường minh sử dụng lượng từ như sau:
 gcd (i:N1, j:N1) r:N1

pre true
post is-common-divisor (i,j,r)
¬ s N1 is-common-divisor (i,j,s) s>r

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
21
Đặc tả hàm không tường minh

 Ví dụ: tính căn bật hai của một số nguyên


int_sqr (x: ℕ) z:ℕ
pre x≥1
post (z2 ≤ x) (x < (z+1)2)

 Ví dụ: hàm trả lại số dư của số nguyên y chia cho số nguyên x


mod (x,y:N)m:ℕ
pre (x > 0) (y > 0)
post d Z (y=d x+m) (0≤m) (m<x)

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
22
Đặc tả hàm không tường minh

 Ví dụ: Hàm trả về vị trí xuất hiện đầu tiên của chuỗi pt trong
chuỗi cx, hoặc trả về 0 nếu chuỗi pt không xuất hiện trong cx ?
 Thảo luận:?

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
23
Đặc tả hàm không tường minh

 Ví dụ: Hàm kiểm tra s có là chuỗi con của t hay không?


Phiên bản 1:
issubstr (s: String, t: String) r: B
pre
post ( (r = true) ( p, f String t = p ⃕ s ⃕ f ) )
( (r = false) ( p, f String t = p ⃕ s ⃕ f ) )

Phiên bản 1’:


issubstr (s: String, t: String) r: B
pre true
post r = ( p, f String t = p ⃕ s ⃕ f )

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
24
Đặc tả hàm không tường minh

 Ví dụ: Hàm kiểm tra chuỗi p có phải là prefix của chuỗi s


trong chuỗi t hay không?
is-prefix (p: String, s: String, t: String) r: B
pre
post r = ( f String t = p ⃕ s ⃕ f )

 Ví dụ: Hàm kiểm tra chuỗi p có phải là prefix ngắn nhất của
chuỗi s trong chuỗi t hay không?
is-shortest-prefix (p: String, s: String, t: String) r: B
pre
post is-prefix (p, s, t)
q String ( is-prefix (q, s, t) len q len p)

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
25
Đặc tả hàm không tường minh

 Ví dụ: Hàm trả về vị trí xuất hiện đầu tiên của chuỗi pt trong
chuỗi cx, hoặc trả về 0 nếu chuỗi pt không xuất hiện trong cx
location (pt: String, cx: String) r: ℕ
pre pt [] cx []
post ( p String is-shortes-prefix(p, pt, cx) r = (1 + len p))
(r = 0)

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
26
Đặc tả hàm tường minh

 Đặc tả hàm tường minh (explicit definition)


 Đặc tả có sử dụng các cấu trúc điều khiển

 Thể hiện cách cài đặt hàm

 Lưu ý:
 Trong đặc tả không tường minh, mọi giá trị thỏa Vị từ Post-

condition đều có thể được chấp nhận là kết quả phù hợp
của hàm.
 Trong đặc tả tường minh xác định một giá trị cụ thể phù

hợp với yêu cầu của hàm

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
27
Đặc tả hàm tường minh

 function_name : input_type → output_type


function_name (input_parameter) ≜ expression
hay
 tên-hàm : Tập-nguồn1 Tập-nguồn2 … Tập-đích
tên-hàm (tham-số1, tham-số2, …) ≜ đặc-tả-dạng-giải-thuật

Ở đó chứa đựng tham số, hằng số, hàm, vị từ, hàm xác
định bởi người sử dụng

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
28
Đặc tả hàm tường minh

 Lưu ý:
 Trong đặc tả dạng tường minh không đặt tên cho biến kết

quả trả về.


 Giá trị của kết quả trả về là giá trị được xác định thông qua

đặc tả dạng giải thuật


 Các tham số đầu vào (ở dòng 2 của đặc tả) có kiểu tương

ứng với các tập nguồn ở dòng 1


 Ví dụ:
add : ℝ ℝ ℝ
add (x, y) ≜ x y

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
29
Mối Quan Hệ Giữa Hàm Tường Minh
Và Không Tường Minh

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
30
Cấu trúc điều khiển if-then-else

 Cú pháp:
if Biểu-thức-điều-kiện
then giá-trị1
else giá-trị2
 Cấu trúc if-then-else có thể lồng nhau

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
31
Cấu trúc điều khiển if-then-else

 Ví dụ: hàm tính giai thừa bằng phương pháp tường minh
factorial : N → N
factorial(n) ≜
if n ≥ 1
then n factorial(n-1)
else 1

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
32
Cấu trúc điều khiển if-then-else

 Ví dụ:
Đặc tả dạng không tường minh Đặc tả dạng tường minh
abs (z: ℤ) r: ℕ abs : ℤ ℕ
pre abs (z) ≜
post ((r = z) (z 0)) if (z<0) then –z else
((r = -z) (z < 0)) z
max (a: ℤ, b: ℤ) r: ℤ max : ℤ ℤ ℤ
pre max (a, b) ≜
post ((r = a) (a b)) if (a b) then a else
((r = b) (a < b)) b

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
33
Cấu trúc cases

 Cú pháp:
cases index:
( value1, value2 result1,
value3, value4, value5 result2,

valuen resultm
)

 Cấu trúc case được sử dụng khi chúng ta cấn xét nhiều trường
hợp mà viết đặc tả ngắn gọn hơn thay vì sử dụng cấu trúc if-
then-else.

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
34
Cấu trúc cases

 Ví dụ: Hàm tính số ngày của 1 tháng trong năm không nhuận
số-ngày-trong-tháng: ℕ ℕ
số-ngày-trong-tháng (th) ≜
cases th:
( 1, 3, 5, 7, 8, 10, 12 31,
4, 6, 9, 11 30,
2 28
)

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
35
Sử dụng hàm phụ

 Ví dụ: Hàm tính số ngày của 1 tháng trong năm bất kỳ


số-ngày-trong-tháng: ℕ ℕ ℕ
số-ngày-trong-tháng (th, nm) ≜
cases th:
( 1, 3, 5, 7, 8, 10, 12 31,
4, 6, 9, 11 30,
2 if là-năm-nhuận(nm)
then 29
else 28
)

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
36
Sử dụng hàm phụ

 Ví dụ: Đặc tả hàm dùng chuyển đổi từ nhiệt độ F (Farenheit)


sang C (Celsius):
norm-temp : (Farenheit Celsius) Celsius
norm-temp (t) ≜ cases t of
mk-Farenheit(v) mk-Celsius ((v-32)*5/9),
mk- Celsius(v) t
end

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
37
Sử dụng hàm phụ

 Ví dụ: Hàm tính USCLN của 2 số nguyên dương


uscln (x : ℕ1, y : ℕ1) r : ℕ1
pre
post là-usc (r, x, y) n ℕ1 ( là-usc (n, x, y) n r)

là-usc ( z: ℕ1, x : ℕ1, y : ℕ1) r : B


pre
post r = ( chia-hết (x, z) chia-hết (y, z) )

chia-hết (x : ℕ1, y : ℕ1) r : B


pre
post r = k ℕ1 x = y*k

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
38
Sử dụng hàm phụ

 Ví dụ: Hàm tính USCLN của 2 số nguyên dương


uscln (x : ℕ1, y : ℕ1) r : ℕ1
pre
post là-usc (r, x, y) n ℕ1 ( là-usc (n, x, y) n r)

là-usc : ℕ1 ℕ1 ℕ1 B
là-usc (z, x, y) ≜
chia-hết (x, z) chia-hết (y, z)

chia-hết : ℕ1 ℕ1 B
chia-hết ( x, y) ≜
k ℕ1 x = y * k

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
39
Đặc tả đệ quy

 Đối với đặc tả hàm tường minh thì kỹ thuật đặc tả đệ quy cũng
được áp dụng. Đối với kỹ thuật này chúng ta cần xác định
được điều kiện dừng cho hàm cục bộ. Kỹ thuật này cũng được
áp dụng đối với đặc tả hàm không tường minh.

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
40
Đặc tả đệ quy

 Ví dụ: Đặc tả hàm tính độ dài mảng


Đặc tả dạng không tường minh Đặc tả dạng tường minh
len (s: T*) r: ℕ len: T * ℕ
pre len (s) ≜
post ((r = 0) (s =[])) if s = []
((r = 1+len( tl s)) (s then 0
[])) else 1 + len (tl s)

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
41
Đặc tả đệ quy

 Ví dụ: Đặc tả hàm trả về giá trị của phần tử lớn nhất trong
mảng
maxnum (s: ℤ *) r: ℤ
pre s []
post ( r elems s ) ( x elems s x r )

maxnum (s: ℤ *) r: ℤ
pre s []
post ( ( r = hd s) (len s = 1) )
( ( r = hd s) ( r maxnum (tl s)) )
( ( r > hd s) ( r = maxnum (tl s)) )

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
42
Đặc tả đệ quy

 Ví dụ: Đặc tả hàm trả về giá trị của phần tử lớn nhất trong
mảng
maxnum : ℤ* ℤ
maxnum (s) ≜
if len s = 1
then hd s
else
if hd s maxnum (tl s)
then hd s
else maxnum (tl s)

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
43
Khai báo biến tạm bằng let-in

 Trong quá trình đặc tả các hàm cục bộ, chúng ta có thể sử
dụng giá trị của một biểu thức lặp đi lặp lại nhiều lần. Trong
đặc tả hàm đa số các ngôn ngữ đều hỗ trợ ký pháp let in để đặc
tả một biến tạm và biến này được xem như là một định danh
để thay thế giá trị của biểu thức được sử dụng trong hàm cục
bộ.

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
44
Khai báo biến tạm bằng let-in

 Cú pháp 1:
let định danh (identifier) = Biểu-thức1 in Biểu-thức2
 Ý nghĩa:
 Xác định giá trị của Biểu-thức1 và gán vào “biến tạm” đinh

danh
 Thay thế những vị trí xuất hiện của định danh trong Biểu-

thức2 bằng giá trị của biến tạm định danh


 Ví dụ:
 Cho biểu thức

cos (sin(x) – 1) / (sin(x) – 1)


Ta có thể đặt biến tạm y và viết lại như sau:
let y = sin(x) – 1 in cos (y) / y

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
45
Ký pháp let-in

 Ví dụ: Đặc tả hàm tính giá trị tuyệt đối của tích 2 số nguyên
như sau:
absprod : ℤ × ℤ
absprod (i,j) ≜
let k = i*j in
if k<0 then –k else k

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
46
Ký pháp let-in

 Ví dụ: Đặc tả hàm dùng để tính năm nhuận:


inv-Datec : Datec B
inv-Datec (dt) ≜
is-leapyr(year(dt)) day(dt) ≤ 365
Đặc tả hàm dùng let:
inv-Datec : Datec B
inv-Datec (dt) ≜
let mk-Datec(d,y) = dt in is-leapyr(y)) d ≤ 365

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
47
Ký pháp let-in

 Ví dụ: Đặc tả hàm dùng chuyển đổi từ nhiệt độ F (Farenheit)


sang C (Celsius):
norm-temp : (Farenheit Celsius) Celsius
norm-temp (t) ≜
if t Farenheit
then let mk-Farenheit(v) = t
in mk-Celsius ((v-32)*5/9)
else t

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
48
Ký pháp let-in

 Ví dụ: Đặc tả hàm trả về giá trị của phần tử lớn nhất trong
mảng
maxnum : ℤ* ℤ
maxnum (s) ≜
if len s = 1
then hd s
else
let max-in-tail = maxnum (tl s) in
if hd s max-in-tail
then hd s
else max-in-tail

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
49
Khai báo biến tạm bằng let-in

 Cú pháp 2a:
let định danh Biểu-thức-tập-hợp in Biểu-thức
 Cú pháp 2b:
let định danh Biểu-thức-tập-hợp s.t. Điều-kiện in Biểu-thức

 Ý nghĩa:
 Biến tạm định danh nhận giá trị của MỘT phần tử (thỏa Điều-

kiện) trong Biểu-thức-tập-hợp


 Thay thế những vị trí xuất hiện của định danh trong Biểu-thức

bằng giá trị của biến tạm định danh

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
50
Khai báo biến tạm bằng let-in

 Ví dụ: Đặc tả hàm tính tổng các phần tử trong 1 tập hợp
sumset : ℝ-set ℝ
sumset (s) ≜
if s = {}
then 0
else
let x s in
x + sum-set ( s – {x} )

4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
51

You might also like