1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Nguyên lý lập trinh hàm_chương 1

64 193 1
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Nguyên lý lập trình hàm
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Công Nghệ Thông Tin
Thể loại bài giảng
Năm xuất bản 2023
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 64
Dung lượng 1,05 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

M t ngôn ng th tác operational hay không khai báo non-declarative, đó là các ngôn ng m nh l nh... m nh l nh và các ngôn ng khai báo, không ph i luôn luôn rõ ràng.. − S d ng ch ng trình

Trang 1

i

Trang 3

CH NG I NGUYÊN LÝ L P TRÌNH HÀM

« The primary purpose of a programming language

is to help the programmer in the practice of his art » Charle A Hoare (Hints on programming language design, 1973)

I.1 M đ u v ngôn ng l p trình

Bu i ban đ u

ngôn ng máy (machine language), t h p c a các con s h hai, hay h nh phân, hay

các bit (vi t t t c a binary digit) 0 và 1 Ngôn ng máy ph thu c hoàn toàn vào ki n

m t t h p các s h hai nên g p r t nhi u khó kh n, m t nh c, r t d m c ph i sai sót, nh ng

Ngôn ng máy ti n g n đ n ngôn ng t nhiên

C ng t nh ng n m 1950, ngôn ng h p d ch, hay h p ng (assembly) hay c ng còn

đ c g i là ngôn ng bi u t ng (symbolic) ra đ i Trong h p ng , các mã l nh và đ a ch

h p ng v n còn ph thu c vào ph n c ng và xa l v i ngôn ng t nhiên (natural language),

(Comon Business Oriented Language) n m 1964, Simula n m 1964, v.v

1

Trang 4

Phát tri n c a ngôn ng l p trình

Theo s phát tri n c a các th h máy tính, các ngôn ng l p trình c ng không ng ng

đ c c i ti n và hoàn thi n đ càng ngày càng đáp ng nhu c u c a ng i s d ng và gi m

toán (theory of computation) và hình thành hai lo i ngôn ng : ngôn ng b c th p và ngôn

ng b c cao

đ vi t các ch ng trình đi u khi n và ki m tra thi t b , ch ng trình s a l i (debugger) hay công c

công vi c l p trình t lúc phân tích, thi t k cho đ n s d ng m t ngôn ng l p trình

m t v n ph m g m b n thành ph n : b ký t , b t v ng, cú pháp và ng ngh a

1 B ký t (character set)

2 B t v ng (vocabulary)

Trang 5

3 Cú pháp (syntax)

đúng (statement hay instruction), k t h p các câu l nh đúng thành m t ch ng trình hoàn

Backus-Naur (Backus-Naur Form, vi t t t BNF), ho c d ng chu n Backus-Naur m r ng

Ví d I.1.1 : Trong ngôn ng Pascal (ho c trong ph n l n các ngôn ng l p trình), tên g i,

hay đ nh danh (identifier) có s đ cú pháp nh sau :

ch ho c s tu ý, ch ch có th là m t trong các ch cái A Za z, s ch có th là m t trong các ch s 0 9 Nh v y, Delta, x1, x2, Read, v.v là các tên vi t đúng, còn 1A, β, π, bán kính, v.v đ u không ph i là tên vì vi ph m quy t c cú pháp

đ c đ nh ngh a b i) và v ph i V trái là m t ký hi u ph i đ c đ nh ngh a, còn v ph i là

<statement> ::= <assignment> | <loop>

<assignment> ::= <identifier> := <expression> ;

Trang 6

<loop> ::=

while <expression> do <statement>+ done

<expression> ::=

<value> | <value> + <value> | <value> <= <value>

<identifier> ::=

<letter>|<identifier><letter>|<identifier><digit>

yêu c u đ t ra ban đ u

đ c g i là ch ng trình ngu n (source program)

chính các ngôn ng b c cao ho c các công c chuyên d ng

trình thông d ch, ho t đ ng nh sau :

r i ti n hành th c hi n luôn câu l nh đã d ch đó, cho t i khi th c hi n xong toàn b

Có th hi u trình biên d ch là d ch gi , trình thông d ch là thông d ch viên

Trang 7

Nh ng ngôn ng l p trình c p cao ch đ biên d ch hay g p là : Fortran, Cobol, C,

I.1.4 Phân lo i các ngôn ng l p trình

tr ng (measure of emphasis), theo th h (generation), v.v

ph n c ng, ch ng h n nh l nh (instructions) và c p phát b nh (memory allocation)

Truy c p và c p phát nh các phép toán, ch ng h n new

FORTRAN, ALGOL, Pascal, C, Ada

Hình I.2 Ba m c c a ngôn ng l p trình

Nh ng n m g n đây, ngôn ng l p trình đ c phát tri n theo ph ng th c l p trình (còn đ c g i

là phong cách hay ki u l p trình) M t ph ng th c l p trình có th đ c hi u là m t t p h p các tính

th ng xuyên s d ng chúng S đ sau đây minh ho s phân c p c a các ph ng th c l p trình :

Lôgic

X lý song song

đ i t ng

Th t c

Hình I.3 Phân c p c a các ph ng th c l p trình

Sau đây là m t s ngôn ng l p trình quen thu c li t kê theo ph ng th c :

Các ngôn ng m nh l nh (imperative) có Fortran (1957), Cobol (1959), Basic (1965),

Các ngôn ng x lý song song (parallel) nh Ada, Occam (1982), C-Linda,

Trang 8

L p trình phân b (distributed programming)

L p trình h ng truy c p (access-oriented programming)

L p trình theo lu ng d li u (dataflow programming), v.v

đ c g i là ngôn ng đ nh ngh a (definitional) hay khai báo (declarative) M t ngôn ng th

tác (operational) hay không khai báo (non-declarative), đó là các ngôn ng m nh l nh.

Hình I.4 Phát tri n c a ngôn ng l p trình

Th h 5 : ngôn ng suy di n hay d a logic

Th h 6 : m ng n -ron (neural networks)

Trang 9

Tr c khi nghiên c u l p các ngôn ng l p trình hàm, ta c n nh c l i m t s đ c đi m

c a l p các ngôn ng l p trình m nh l nh

I.1.5 Ngôn ng l p trình m nh l nh

Hình I.5 Quan h gi a tên bi n, ki u và giá tr trong ngôn ng m nh l nh

Hình I.5 minh h a cách khai báo d li u trong các ngôn ng m nh l nh và các m i quan

l nh v a khai báo v a kh i gán int i=5) T h p tên, ki u và giá tr đã t o nên đ c tr ng

c a bi n

nào S khác nhau gi a «nh th nào» và «cái gì», c ng nh s khác nhau gi a các ngôn ng

Trang 10

m nh l nh và các ngôn ng khai báo, không ph i luôn luôn rõ ràng Các ngôn ng khai báo

d li u đã đ c đ t tên

các khai báo, ho c toàn c c (global), ho c c c b (local)

− Các ki u d li u c b n thông d ng là s nguyên, s th c, ký t và lôgic Các ki u m i

đ c xây d ng nh các ki u c u trúc Ví d ki u m ng, ki u b n ghi, ki u t p h p,

ki u li t kê,

đ ng n u có cùng giá tr và có cùng phép toán x lý

(thi t b ngo i vi) b thay đ i b i các l nh vào-ra Giá tr đ c tính t các bi u th c

− Ch ng trình con th ng có hai d ng : d ng th t c (procedure) và d ng hàm

(function) S khác nhau ch y u là hàm luôn tr v m t giá tr , còn th t c thì không

trình con ho c theo tr (by value) và theo tham chi u (by reference)

− S d ng ch ng trình con th ng gây ra hi u ng ph (side effect) do có th làm thay

Trang 11

Các ngôn ng hàm là c ng các ngôn ng b c cao, mang tính tr u t ng h n so v i các ngôn ng m nh l nh

đ n (correctness proof), c n tr t i u hóa (optimization), và c n tr quá trình song song t

đ ng (automatic parrallelization) c a ch ng trình

M t ngôn ng hàm, hay ngôn ng áp d ng (applicative language) d a trên vi c tính giá

tr thu c m t mi n khác (range hay co-domain)

t ng (phép +) c a hai tham đ i là 2 và 3

đ c g i, mà ch ph thu c vào cách g i nó nh th nào đ i v i các tham đ i

Trong ngôn ng l p trình m nh l nh, k t qu c a bi u th c :

f(x) + f(x)

có th khác v i k t qu :

2 * f(x)

ngôn ng l p trình hàm, c hai bi u th c trên luôn có cùng giá tr

Do các hàm không ph thu c nhi u vào các bi n toàn c c, nên vi c l p trình hàm s d

hi u h n l p trình m nh l nh Ví d gi s m t trình biên d ch c n t i u phép tính :

f(x) + f(x)

thành :

2 * f(x)

nh t quán trong k t qu tr v c a hàm Tuy nhiên, m t trình biên d ch ngôn ng m nh l nh,

không ph thu c vào các bi n đã b thay đ i trong quá trình th c hi n b i l i g i th nh t

1

Ada là ngôn ng l p trình b c cao đ c phát tri n n m 1983 b i B Qu c phòng M (US Department of Defense), còn g i là Ada 83, sau đó đ c phát tri n b i Barnes n m 1994, g i là Ada 9X Ngôn ng Ada l y tên

c a nhà n Toán h c ng i Anh, Ada Augusta Lovelace, con gái c a nhà th Lord Byron (1788−1824) Ng i

ta tôn vinh bà là ng i l p trình đ u tiên

Trang 12

M t trình biên d ch song song s g p ph i v n đ t ng t n u trình này mu n g i hàm theo ki u g i song song

Bên c nh tính u vi t, ta c ng c n xem xét nh ng b t l i v n có c a l p trình hàm :

vi c mô t các c u trúc d li u và khó th c hi n quá trình vào/ra d li u

b ng ngôn ng m nh l nh

Ch ng h n ta xét m t hàm P s d ng m t bi n c c b x và tr v m t giá tr có ki u b t

function P(n: integer) −> SomeType ;

và thay th giá tr m i cho ph n t này Cách ti p c n này kém hi u qu h n so v i phép gán cho ph n t

Trang 13

Tóm l i, ngôn ng hàm d a trên vi c tính giá tr c a bi u th c Các bi n toàn c c và phép

ngoan 2 (lazy evaluation), ph ng trình (equations), so kh p (patterm matching)

Các hàm đ quy (recursive functions) là m t trong nh ng khái ni m chính trong ngôn ng

đ c g i là m t «script», là m t t p h p các ph ng trình (equation) đ c đ nh ngh a theo

đ i đã nh n mà thôi

ngh a hàm Ph n khai báo có th v ng m t có d ng m t nguyên m u hàm :

<tên hàm> :: <mi n xác đ nh> -> <mi n giá tr >

ph i có th có m t đi u ki n đóng vai trò «lính gác» (guard) phân bi t đ ng cu i :

<tên hàm> [ <danh sách tham đ i> ] = <bi u th c> [ <đi u ki n> ]

Miranda nh sau :

2

Trong cu n sách có nhi u thu t ng ti ng Vi t do tác gi t d ch t ti ng Anh

Trang 14

Dòng đ u tiên khai báo celsius là m t hàm nh n m t đ i s và tr v m t giá tr s

ki u đ quy nh sau :

fac :: num −> num

function fac (n: integer) : integer ;

+bx+c=0 :

Trang 15

where delta = b*b - 4*a*c and radix = sqrt delta

I.2.3 Danh sách

Trong h u h t các ngôn ng hàm, danh sách (list) là c u trúc d li u quan tr ng nh t

[1 10] || danh sách 10 s nguyên (1 10)

nguyên week_days = ["Mon","Tue","Wed","Thur","Fri"]

đ nh ngh a nh v y đ c g i là nh n bi t đ c hay ng m hi u (list comprehension) Ví d ,

perms L = [ a:T | a <- L : T <- perms (L [a]) ]

Miranda :

Trang 16

fac n = product [1 n]

vi n c a Miranda :

result = sum [1, 3 100]

đ nh ngh a Các phép toán s c p nh t là xây d ng (construction) và phân tách

(length) m t danh sách, phép ghép (concatenate) ++ (hai d u c ng liên ti p) các danh sách,

Trang 17

length L = 0, if L = [] || danh sách r ng có đ dài 0

|| danh sách khác r ng có ít nh t m t ph n t

length L = 1 + length (tl L), otherwise

concatenate L1 L2 = L2, if L1 = []

concatenate L1 L2

= (hd L1):concatenate (tl L1) L2, otherwise

đ u tiên ch cách thoát ra kh i hàm, theo ki u chia đ tr (divide and conquer) Trong tr ng

h p ghép m t danh sách r ng (if L1 = []) v i m t danh sách b t k khác (L2) thì tr v

k t qu chính là danh sách này và quá trình k t thúc

d ng phép toán cons (otherwise) theo ki u đ quy Do danh sách th nh t L1 ≠ [] nên L1 có ít nh t m t ph n t Khi đó danh sách m i (là danh sách k t qu ) đ c t o ra b i ph n

l i c a L1 và tham đ i th hai là toàn b L2 Quá trình c th ti p t c cho đ n khi danh sách còn l i r ng

Ta có th so sánh cách xây d ng các danh sách trong các ngôn ng m nh l nh v i ngôn

ng Miranda

allocation) Các phép toán trên danh sách là s thao tác m c th p trên các con tr Vi c c p

(hook) hai danh sách v i nhau nh m t phép gán con tr , mà không c n xây d ng m t danh

danh sách th nh t

phát b nh M c d u nh ng y u t này là t n t i trong ngôn ng hi n hành, nh ng chúng

đ c che d u m t cách hi u qu đ i v i ng i l p trình t o nên m t m c tr u t ng có l i

Trong nh ng tình hu ng nh v y, m t h th ng th i gian th c hi n RST (Run Time

System) qu n lý b nh l u tr các ph n t c a danh sách RTS cho phép c p phát b nh khi

chúng

employee = ("Kim",True, False , 29)

Các ph n t ki u tuple không có th t Vi c truy c p đ n m t ph n t ch có th đ c

th c hi n nh phép so kh p (pattern matching)

Trang 18

I.2.4 Phép so kh p

otherwise hay while Tuy nhiên, Miranda cho phép s d ng m t cú pháp t ng quát đ

l a ch n gi a các kh n ng d a trên các m u (patterns) d ng :

<patterm> = <expression>, <condition>

đ i là l n h n ho c b ng 1 Khi đó giá tr c a n đ c l y giá tr c a tham đ i tr đi 1 m t

Trang 19

sách tham đ i và do đó, L là danh sách còn l i tr thành tham đ i m i c a hàm K t qu l i

reverse (a:L) = reverse L ++ [a]

có hai ph n t :

fst (a, b) = a || truy c p đ n m t ph n t th nh t

snd (a, b) = b || truy c p đ n m t ph n t th hai

drop (n+1) (a:L) = drop n L

take n L ++ drop n L = L

ph n (partial parametrization)

lên hai đ i x y), vi t quy c (x, y) f(x, y), thì c ng đ c xem nh vi t (f x) y, ngh a là k t

qu c a vi c áp d ng f cho x là m t hàm đ áp d ng cho y Ta vi t x (y f (x, y))

M t cách t ng quát cho hàm n bi n f (x 1 , x 2 , , x n) :

x 1 (x 2 (x 3 (x n f (x 1 , ,x n )) ))

mult x y = x * y

N u hàm mult đ c g i v i hai đ i s , thì mult s tính tích s c a hai đ i s này, theo

th hai y)

Trang 20

M t cách t ng quát, m t hàm nào đó có nhi u h n m t tham đ i có th đ c tham đ i

bi u th c b c cao h n

answer t các l nh Miranda sau đây :

answer = twice twice twice suc 0

twice f x = f(f x)

suc x = x + 1

cao Ch ng h n t hàm th vi n member x L ki m tra danh sách L có ch a ph n t x không (k t qu là true ho c false), ta có th áp d ng đ đ nh ngh a các hàm khác nhau

nh sau :

vowel = member ['a', 'e', 'i', 'o', 'u']

digit =

member ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] month =

member [ "Jan", "Feb", "Mar", "Apr", "Jun", "Jul", "Aug",

"Sep", "Oct", "Nov", "Dec" ]

các ph n t c a m t danh sách Miranda có hàm foldr đ c đ nh ngh a nh sau :

Trang 21

and = foldr (&) true

g i phép « và» lôgích cho t t c các ph n t c a m t danh sách K t qu phép g i hàm and

L là true n u m i ph n t c a danh sách L đ u là true, k t qu là false n u ng c l i

reverse = foldr postfix []

where postfix a L = L ++ [a]

ngh a nh ng hàm b c cao m nh và t ng quát nh hàm foldr v a xét

M t hàm b c cao quan tr ng khác là map f L v i f là m t hàm và L là m t danh sách Hàm map tr v k t qu là m t danh sách m i g m các ph n t c a L đã đ c áp d ng cho hàm f Ví d :

map triple [1, 2, 3, 4]

> [triple 1, triple 2, triple 3, triple 4]

> [3, 6, 9, 12]

Trang 22

I.2.7 Ki u và tính đa ki u

Các ngôn ng hàm có m t h th ng ki u d li u hoàn toàn khác v i các ngôn ng m nh

trình

functions) v i l i g i có các tham đ i có các ki u d li u khác nhau

trong Miranda là num, bool và char Ki u num không phân bi t s nguyên hay s th c

Ki u bool có hai giá tr h ng là true và false Ki u char g m các ký t ASCII M t

’x’, ’&’, ’\n’, v.v

N u T là m t ki u, thì [T] là m t ki u danh sách g m các ph n t ki u T Ví d danh sách sau đây :

[[1, 2], [2, 3], [4, 5]]

có ki u [[num]] vì đây là m t danh sách g m các ph n t là danh sách các s M t h ng chu i có d ng [ char ], ch ng h n chu i «bonjour» đ c vi t trong Miranda [’b’,

’o’, ’n’, ’j’, ’o’, ’u’, ’r’]

N u T1, , Tn là các ki u nào đó, n>0, thì (T1, , Tn) là m t ki u b n ghi, hay b n

ph n t b t k Ví d b 3 (true, ”Honda”, 7331) có ki u (bool, [char], num)

N u T1 và T2 là hai ki u nào đó, thì T1->T2 là m t ki u hàm v i tham đ i có ki u T1

num −> num

Chú ý phép −> có k t h p ph i (right associative)

báo ki u currying nh sau :

mult :: num −> (num −> num)

Có ngh a r ng mult đ c xem là hàm có m t tham đ i tr v m t hàm khác có ki u : num −> num

sq :: num -> num

sq n = n * n

triple x = 3 * x

Trang 23

thì b ki m tra ki u s suy ra r ng x ph i là m t s , vì x là m t th a s trong m t phép nhân

c a hàm này ph i là :

triple :: num −> num

th c (formal parameters), m t hàm đa ki u có th ch p nh n l i g i t ng ng v i nhi u

tham đ i th c s (actual parameters) có các ki u khác nhau Khác v i các th t c trong Ada,

nh bool, num, [num], v.v , sao cho c hai tham đ i đ u ph i có cùng m t ki u Nh v y,

fac :: num -> num

ack :: num -> num-> num

sum :: [num] -> num

month :: [char] -> bool

Trang 24

Các quy t c đ nh ngh a ki u nh trên làm tránh đ c sai sót khi s d ng hàm không đúng,

ch ng h n :

5 + (pair 1 2) || ki u k t qu là m t danh sách, không là m t s

Trong ví d th hai, Miranda xem r ng ki u c a (pair 1 2) là m t danh sách các s ,

sai sót khi s d ng hàm

I.2.8 Tính hàm theo ki u khôn ngoan

đó m i ti n hành th c hi n tính toán trong hàm Ch ng h n, l i g i :

mult (fac 3) (fac 4)

mult 6 24

đ cho k t qu cu i cùng là 144 Cách vi t rút g n bi u th c lúc đ u thành d ng đ n gi n h n

đ c g i là phép rút g n theo th t áp d ng (applicative order reduction) Chú ý r ng phép

ti n

Gi s r ng ta mu n xây d ng hàm cond nh n m t giá tr bool b nh là tham đ i th

b là false :

cond b x y = x, if b

cond b x y = y, otherwise

hay g n h n :

Trang 25

cond cho m t đ nh ngh a khác c a hàm fac :

fac n = cond (n = 0) 1 (n * fac (n - 1))

B i vì l i g i fac 1 kéo theo l i g i fac 0, l i g i fac 0 s kéo theo l i g i fac − 1

và c th ti p t c

thi t, nh ng bi u th c nào không c n thi t thì b qua

bi u th c if d ng gi ng (pseuclo-notation) Tham đ i th ba c a cond s không đ c

fac 1

> if (1=0) then 1 else (1*fac (1-1)) || g i cond

> if false then 1 else (1*fac (1-1)) || tính 1 = 0

> 1*fac (1-1)

> 1*((if 1-1=0) then 1 else ((1-1)*fac ((1-1)-1)))

|| g i cond > 1*((if true then 1 else ((1-1)*fac ((1-1)-1)))

|| tính 1-1 = 0

> 1

Trang 26

> 2 || ph n t th hai

hd (tl (map triple [1 ]))

Th c t , ngôn ng Miranda ch cho phép xây d ng các danh sách h u h n Ch khi toàn

ho c :

where sieve (p:x)=p : sieve [n|n<-x: n mod p>0 ]

có th tính m t bi u th c m t nhi u l n, trong khi phép rút g n theo th t áp d ng ch tính

nh ng không tính nhi u l n

Trang 27

t ng chi phí tính giá tr hàm theo ki u khôn ngoan cao h n bình th ng Hi n nay, ng i ta đang phát tri n các ph ng pháp t i u nh m gi m t ng chi phí này

bi t cho phép tính giá tr tham đ i th hai ch khi c n thi t

I.2.9 M t s ví d

quân h u và tìm dãy s Hamming

1 Lo i b nh ng ph n t trùng nhau

Ta c n xây d ng hàm uniq nh n m t danh sách các ph n t đã đ c s p x p đ tr v

th hai s d ng kh n ng th hi n m t bi n (a) hai l n trong cùng m t v trái M t khi dòng

đ c ch n Dòng này này c ng t o ra m t l i g i đ quy v i ph n t đ u tiên c a danh sách

là cái ra c a nó Ch ng h n danh sách [3, 4, 5] d n đ n ch còn ph i x lý [4, 5]

c a danh sách, g i là x Ti p theo, quicksort t o ra hai danh sách con, m t danh sách ch a các giá tr nh h n ho c b ng x, và m t danh sách ch a giá tr l n h n x M i m t danh sách

đ c s p x p m t cách đ quy (b ng cách g i l i quicksort) Cu i cùng, các danh sách k t

Trang 28

qu và giá tr x đ c ráp l i v i nhau và tr v k t qu là danh sách đã đ c s p x p Ph n t

đ c g i là ph n t tr c (pivot)

là danh sách t t c các ph n t a c a danh sách Tail có giá tr nh h n ho c b ng x Ti p

ch a m i ph n t x đ c ráp l i v i nhau b ng cách s d ng phép ghép danh sách ++

ki u, có d ng :

quicksort :: [a] −> [a]

3 Bài toán tám quân h u

Hình I.6 M t l i gi i c a bài toán tám quân h u

Trang 29

Bài toán tám quân h u đ c nhà Toán h c ng i c Call Friedrich Gauss đ a ra vào

đ c nhi u ng i gi i tr n v n trên máy tính đi n t , theo nhi u cách khác gi i nhau

th bi u di n bàn c b i m t danh sách các s nguyên cho bi t v trí hàng c a m i quân h u

đ đ t các quân h u trên n c t đ u tiên

4 Bài toán Hamming

x p và không cho phép các s trùng nhau

Hình I.7 Gi i bài toán Hamming nh các quá trình gi i song song

Có th gi i thích bài toán Hamming m t cách tinh t h n b ng cách s d ng m t mô hình

x lý song song nh trong Hình I.7 Mô hình s d ng ba quá trình nhân, m i quá trình nh n

m t dòng giá tr vào gi ng nhau và t o ra m t dòng ra phân bi t

Trang 30

m t dòng k t qu ra đ u đã đ c s p x p theo th t t ng d n M t quá trình th t làm

trình nhân

Hamming theo dãy t ng d n và không ch a các s trùng nhau

Hamming

mul :: num −> [num] −> [num] || nhân các ph n t

ham = 1 : merge3 (mul 2 ham) (mul 3 ham) (mul 5 ham)

Hàm mul th c hi n phép nhân b ng cách nhân t t c các giá tr trong danh sách s v i

đ i, nh ng ch ng trình s đ c b t đ u b i l i g i ham Phép tr n ba dòng (3-way merge)

đ c xem nh là phép tr n c a hai dòng (2-way merge) :

merge3 x y z = merge2 x (merge2 y z)

= (x:merge2 xs (y:ys)), if x<y

= (x:merge2 xs ys), if x=y || lo i b s trùng nhau

= (y:merge2 (x:xs) ys), if x>y

trong th vi n c a ngôn ng Miranda

vòng l p vô h n Tuy nhiên v i k thu t tính giá tr hàm theo ki u khôn ngoan, h th ng s tìm cách rút g n hàm merge3 và ch tính giá tr các đ i s c a nó khi th c s c n thi t

Trang 31

I.3 K t lu n

Common Lisp, Hope, Standard ML, Miranda, Haskell và Lucid Ph n ti p theo c a giáo trình này s nghiên c u Scheme, m t ngôn ng hàm có ngu n g c t Lisp

không ph i là ngôn ng hàm thu n túy, mà cho phép s d ng các phép gán cho bi n, và do

v y, có th x y ra hi u ng ph

applications), đ c bi t trong l nh v c trí tu nhân t o (artificial intelligence) i v i các phép

đây Cú pháp c a Lisp r t đ n đi u (uniform), tuy nhiên, đi u này giúp cho vi c l p trình và

Lisp

danh sách có th ch a nhi u ki u ph n t khác nhau i u tho i mái này có th có l i trong

bi n (dynamic binding) nên r t d gây ra s l n x n, nh m l n khi s d ng bi n

thi t k các ngôn ng hàm Các ngôn ng th a k Lisp s d ng h th ng ki u, cho phép s

d ng các k thu t tính giá tr hàm theo ki u khôn ngoan và so kh p

Trang 32

Tóm t t ch ng 1

ra k t qu là các giá tr thu c m t mi n khác, gi ng nh m t hàm toán h c Các ngôn

ng hàm thu n túy thi u các y u t m nh l nh nh phép gán và các l nh l p Tuy nhiên, các hàm không gây ra hi u ng ph nh h u h t các ngôn ng m nh l nh g p

Các ngôn ng hàm thu n túy có tính nh t quán trong k t qu tr v c a hàm, ngh a k t

đ i, d mô ph ng song song và d ch ng minh tính đúng đ n

trình

Danh sách là c u trúc d li u chính c a các ngôn ng hàm Nhi u phép toán trên danh sách là ti n đ nh (predefined)

ti n hành t đ ng theo k thu t d n rác

tham đ i không c n tính giá tr , và ch tính giá tr các tham đ i khi th c s c n thi t Phép rút g n theo th t chu n c n c trên k thu t tính giá tr hàm theo ki u khôn ngoan, cho phép x lý các c u trúc d li u vô h n n u có th K thu t này t ra thân thi n h n so v i k thu t tính giá tr có l i, nh ng khó v n hành có hi u qu

m u đã cho

Các ngôn ng hàm không thu n túy (impure functional languages) nh Lisp mang m t

s tính ch t c a ngôn ng hàm, nh ng không có tính nh t quán khi hàm tr v k t qu

Ngày đăng: 08/11/2013, 04:15

HÌNH ẢNH LIÊN QUAN

Hình I.1. S   đ  cú pháp tên trong ngôn ng  Pascal . - Nguyên lý lập trinh hàm_chương 1
nh I.1. S đ cú pháp tên trong ngôn ng Pascal (Trang 5)
Hình I.3. Phân c p c a các ph ng th c l p trình. - Nguyên lý lập trinh hàm_chương 1
nh I.3. Phân c p c a các ph ng th c l p trình (Trang 7)
Hình I.2. Ba m c c a ngôn ng  l p trình. - Nguyên lý lập trinh hàm_chương 1
nh I.2. Ba m c c a ngôn ng l p trình (Trang 7)
Hình I.4. Phát tri n c a ngôn ng  l p trình. - Nguyên lý lập trinh hàm_chương 1
nh I.4. Phát tri n c a ngôn ng l p trình (Trang 8)
Hình I.5. Quan h  gi a tên bi n, ki u và giá tr  trong ngôn ng  m nh l nh - Nguyên lý lập trinh hàm_chương 1
nh I.5. Quan h gi a tên bi n, ki u và giá tr trong ngôn ng m nh l nh (Trang 9)
Hình I.6. M t l i gi i c a bài toán tám quân h u. - Nguyên lý lập trinh hàm_chương 1
nh I.6. M t l i gi i c a bài toán tám quân h u (Trang 28)
Hình I.7. Gi i bài toán Hamming nh  các quá trình gi i song song. - Nguyên lý lập trinh hàm_chương 1
nh I.7. Gi i bài toán Hamming nh các quá trình gi i song song (Trang 29)

TỪ KHÓA LIÊN QUAN