MỤC LỤC
LỜI CẢM ƠN
“Tìm hiểu lập trình
hàm với ngôn ngữ F# và xây dựng ứng dụng minh họa”
!"#$%&'()*+(,-,,
./012
3&'456" 789::;4(<
=>4 >?#@+6A 2B. C
;-D+<@<C@E--
3&45" Nguyễn Thị Thanh Huệ 6Đào Anh Hiển;
)(F=>4 2: B.
/.6"CG)*@+>HI@
BJ>./4B. C;-/D+2
1
3K/LB')M
@" .@G#2N@IBJ6";=>4
O/6#&'45P
PHẦN I: MỞ ĐẦU
1. Lý do chọn đề tài
8""N QB C 2-. 1&
<8"" R'B C/6
H#.-61&6161CA
N)+(,""B.
N 24&A@(/A/")*B'>R/S
""N Q A/ .<@24&A
@(>.&E)5<B4/J ? (-
8T2-. <S1@ #/0
-. A/8"":
)*<R.>;U<C8V8""
/")*&/2/C"1.C2-H".>;
-,)-
2
: )2-. )*>;1"");B
?CW“Tìm hiểu lập trình hàm với ngôn ngữ F# và xây dựng
ứng dụng minh họa” /X.Y-. /X.-
2. Ưu, khuyết điểm
a. Ưu điểm
- UNID+
- ZA-.[66R "#-)5-
4B.A-+<-
b. Khuyết điểm
/"#I)*C)>D@N -;
3. Hướng tiếp cận của đề tài
- : -B./ D
PHẦN II. NỘI DUNG
CHƯƠNG I. TỔNG QUAN VỀ NGÔN NGỮ Fsharp (F#)
1.1. F# là gì?
\;- /.-;4BAI
.N)/;- @"I*-/;- ].
"#/;- [>))*).@I<1"/;-
A E))*:+/#/<#/!1"/;-
)I*-D#^6N(_(
)*>A+/<)5
$%/"#/;- D493:$%*-A4`"W
/;- /;- A E/;- ))*$%><N
C>A+"4B.A.>.2B4
A^><MN@*-4`-./;- D
)5 @.<1K"$%)*I*-
93:$ a @D2b(,$%M54)8%
3
\;- +][/' 4+.D+
C2)/;- M)2542+<>
1N\;- 2b(,+]>THW1"
#+]<2c2A E1"#
+])*I*-"#)8%d2/e2c
>'NXD".+(,1@f;
/;- +]N#>g+<S+G g/;-
+]< #.@^]2A
#/0+(,B C) ;-(#/"I
-'I@D@0; C @ -6@C"
2Ch6'5/;- +]/-612
]1"/;- @>.^>/ . A(#/
X>N/0/;- 22
$%@.."#/;- +]@.RHN>4
/;- >L>/;- ))*9NMA-2
/D@#"#>D(?"#@*-.^#
-./;- ^ )1"#2A2<
S1"#>D(?9#)@$%@[
-.@-i-><N#@I<AB4
A1."@*-E @F^ C'I
@f;/;- +]
$%93:A-.-;/;- D.
IN2S-,'<DIE/1@f;
/;- +]2SE->< R/;- D5>A@
"#><2b(,7"N5C/;-
+]$%A-)A (,.
+]/;- D493:
1.2. Lịch sử phát triển
$%/>1O\j"#/;- O/k( D
41"#/;- l/
e6)*-. >RmRO 2no2 )N-
4
,)*-. <O 2nm/- m2
$%>L6&A[]pqqr-D>4AN/$%pq
j-.stuqvupqsqk/-612/(pqsq
$%>L6]pqqp@m#)@.<>-;D
+1O 2nB?4>4 gwO\w-;)
@"#( D/J (AANA/)*
493:m.)*L/@.h 2
. 93:8\odD>4I+6D )-.
1$%/ ]pqqr
$%/A-6"#/!["#/;- l8/.
NNN)*C/wl8/93:w$%@"X<@"N
l8/D 1"#/;- O\N[]
sxtY$%M E [y2@//^>I]"#D
)*C/ 2B&- 222a @z/a2FN # @<S
#.@1#"#Xi X
#)2b(,1C\J(5>4.@B?-,
-. $%// D a>(.1$%
O^(TN#)5Xl/y2@//)/;-
$%/@.>: N$%-;.2/;./;-
))*.@f;"#/@.>A4.
"#+]I@.\;- $%N&)/2
))*52."#+]@./;- MN&
)/2/<5 $%>.@f; 93:)<-
j(/(k !j(-k .&<j z/k N M
D.@f;) I(FA<j&- 22Bk."
]j- 2k
$%M* A.@193:)N6@4]
)5."##8{{ 2/e2 w"# T R
8%wF@A"-.I9$%
E [.X/&B85Ry<:69"9#8
j8\|n 2 }8\|kdD>4~)*>H2>R
O 2n93:$ a @O . " )/ /1
5
O 2n $%N;(,.).@f;)*-. >R
O 2n 5 / X 93: 5 # / X
XRO 8E>X ])B C.]&-
I) A"#I*-2b(,\|9•1O 2n
CHƯƠNG II. ĐẶC ĐIỂM CỦA NGÔN NGỮ F#
2.1. F# hỗ trợ lập trình hướng đối tượng
$%-i- [)*N(/222>€2-i-54
N(
2.2. F# hỗ trợ lập trình hàm
\-./;- ;- #)5 2S/
+@"-4/N2S/)•9 $%/"#2b
(,@2/;0/.@(#/@"6-4@>. ! >R
)/;- E2S)*2 >R >D(? B. >D
(?
I(,W/2j>k‚{>
uu@"6)>@
2.3. F# liên kết chặt chẽ với .NET
$%/D@^S93:-i-></)*A4#
93:N$%>D(?)*A4#>4^^4
8\|n 2 j8\|kz/)*< <
6
)* DA4#" )N8\|UN0/$%@">?
<>Rƒ(a2QN<)* D\&„ /OlZ
l-emy5#$%I*-;93:$ a @e2
8/22\> je8\k2b(,e8\ $%"@Q545
8%e93:
2.4. Môi trường tương tác
s O" )@$%@.V)" )"#
B'@"-4/" )"(?/>D(?+
$%| 2/$%A-b2H)5.)*I*-"
)2/2(8b2H-i-><;-$%(N2S>D(?
/;-+U-i-><(_(&'(.- -(
2 @ (@><
U R b 2H $% | >< W a }… l 2 ƒ(a }… $%
| ^(TH*--IL8 /{„/{$
7><()5 2S>D(?@@^-p(AA-~
jcck
2. I(,W
3. †$%| ><!
l-2ƒ(a2$ 2
\n‚a$ 2jk
n2>/‡} cc
Y
r :/;-+ n
ˆ N!W
n:&‡}‰//a /(Šcc
t :$ 1><2S/;-+HD‰//a /(Š
7
2.5. Cú pháp đơn giản
$%NE- N.-6@"-4>g.^-[@N
.^-‹Œ>g.,(Q
2.6. Tính khái quát hóa tự động
$%/"#N5@.B.N@*-1@.
B.N/)5 545C5HB.
59NM]@4].2b(,8."#@"N5@.
B.N>)/;- -4I. .)
@@.B.A1.1C
8.@"-,@(#/1>)*$%@.B.
N
I(,W/2a-j&k‚j&k
2.7. Ngôn ngữ có ít từ khóa
$%/"#NI[@Nm)'/(,.[@N1
$%
:[
@N
O"4
„>2
}= -)5+@")*-i-
^= N/ [)*
„( b(, >(2B@>.
I@>.@
2
„2 mT @>./-
mT .'-*-j2
- k
„22
mT&. •/K
e2 mT/D/-525
e
eL6@
8/22 7>./-
mn
/
:-)5+ [
)*mT-)5+ [
)*< -)5+4
m/
7>.(/
m b(, Q/^-^>L
8
>
m 7EE- >2
ma
2
82@A-5 K@
[
ma
b
3/n U@-'.
3/2 b(, E- @-'.
3( }: ?0@R @
>@E-61?0
D
}7E E- >2
3&-
7>.</
3&
d<)5.1)*@>.
/ T@?-']22>/
$/2 h. ?2@>/
$/
/
b(, E- </
@>D )*)(TN
&4 </@"
$ b(, A EQ/^-n
$ U)*2b(, .>+/>(
$
b(,)[@Nn2b(,
>+
h/>
/
7"j2-kA
93:
|n 8'@n
| b(, Q/^-n Ž)*(T
E- >2
|
U)*2b(,&.?/*-52R^
(
|
n
b(,@>..
(
|
/
b(,= DN
)*A @22>/
\• :I./•
\ U)*2b(,/D@@^D
. ?^+]
O
e+
O
>
U)*2b(,@>.I^
-)5+ @)*
O
>/
mT@>.>0/N
H)*
9
9
2-
b(,@>.@"
D(T*-/J.>.
@.
9a U)*(T@D@&.?C
A E< )*mT
>@-4N<
A?
9 7"2/[@N)N
)*(T . >2
9// 8= 2L^1
)*8M)*(T)2
l- mT< @"2b(,N
2V
l b(,22.
l
(
mT•-)5
+1/-5>4 [)*
d
h< ;-1D
d>/
U)*-i- ;-[>D
D
o yB
o
: 4. ?@B4
8= /-)5+N)*C
@"6< )*,
7>.A E
: b(, >+@
: b(, Q/^-
: h. ?1@e/
: b(, >+ z//
&b/J</
:- U)*2b(,@>./- (
2
‘2 b(, B4/JD
/ U)*2b(,= . ?^
@
( 7( 93:
ƒ
U)*2b(, >@
2
ƒ/
Q/^-a/
ƒ b(,@*->+
10
2.8. Danh mục các kí hiệu và toán tử
Ký
hiệu
hoặc
toán
tử
Mô tả
P }:"
}
’“ h<]>4
% }8.&b/J^=? >D(?
}@2b(,@= @
/< N;-/<
^ >A@”./<NX
[N
• b(, .>^1
>D(?
– }:I2()1-i-
}mT I(F
— }:I?=1. ?>/2b
(,@I*-."#@.
}b(, F„9m
—— :I.bEu2.b„9m
——— :I.b>a2„9m
’ }<@J5
}= 2@
jk U<(.. ?(A1-
jŽk }= +>)*..
}<-/2
})*2b(, ?0.b
j˜Ž˜k }<EINB
(Q
˜ }di-'
} .@= i-
-/
})*2b(, .5?/)
./<
˜˜ :I/M[
{ :I-i-
:..-6b -/2^.
2
} di- [
}… } 42. ?
}2b(, .>+-+*-
} ;-.D.D.
11
' D61
}2;--'
8=?s-<
8=?s-<XN2]
™Žš : ;--6b4
u }di-
}2b(, 5?/)1.
/<
uu 7R6sEI
uuu 8= sEIZO\
W : EI.
WW }:< (2. .2S
-4
}:..-61(2.
W‚ h.. ?2
W… 8@/D5
W• : EF$/22
•… 8@2@A-5
c }:..>+
}:..-6b1(2.
}:.. )1 (
‡ 2.>i5
‡‡ U4)*p+]
‡‡‡ di-(?> .
‡} h.. ?>
‡Ž… h</<2
‡… 2.@.
‡› œ(F@B4>D-4B-i-I
>D .
‡‚ 2.>i5>g
‡•
•…
O I(F
॥
••
…
O I(F@"?@
‚ 2.>g
… 2./5
……… m?>-4
…‚ 2./5>g
™Žš h<(2.
™›Ž›š h<.-6b14
™‡Ž…š h<I
ž eGB@J@-(T
12
K@J
Ÿ 8=?.2(<N-4)*
R(?+@"-4R
<
ŸŸŸ di-< [lo
b(, >= 2
‹ŽŒ h<H>+HI
.
› h<K-6b-T*- )
*-2b(, .. ?/@D
›› di-lo
›… (F@B4>D .B-i-I
>D-4
¡¡ 7>. <B.4
2.9. Độ ưu tiên của các toán tử
Toán tử Ưu tiên liên đới thực hiện
„2 d4
ƒ d4
›… : .
W d4
\ 7"
$
n
7"
|n 7"
}… d4
W‚ d4
’ 7"
l ›› : .
——— : .
‡…‚›— : .
Ÿ d4
WW d4
W•…•… 7"
}{ : .
˜u– : .
˜˜ d4
›jk d4
13
CHƯƠNG III. KIỂU DỮ LIỆU TRONG F#
3.1.Cú pháp của kiểu dữ liệu trong F#
: $%K@N?(<#- 2b(,.?
(<A EI@@>.-)5+(/#@J.
A E@.Ž7@>.A E)5 "
(? "(?DA E#- 1@(#/A
EA8A EAN=/s;(<@?0
;(<(2¢@^2 @-+<-5
#- 2S-+<-5
Kiểu Ngữ pháp Ví dụ
752R :- |>
7;-*-W
/222
Ž
:- 8/
d 2
7L :- e
761
;(<
92--
2|l
ƒ
74 :-™š
:-
|™š
|
74p
:-™š |™š
74`
:-™š |™š
7-/ :-s˜-p |˜2
7 :-}- 2
}-
h }
-‡-}
- 2…
’/2
\2‡“…
7A E,
j
@,k
:-} 2
}-
h }
-‡-} 2…
|/2
\2‡…
7 :-s}…-pŽ
}… }-
|}…
7(/ m/n- m/n}
…
7(£ %- %2B‡…
14
3.2. Kiểu suy diễn
852(_@K */;- D@"6@>.@)
(#/F4>4@*-#4GD6@
¤)R152(_//;- D@"6"4@1A
E [@ >D(?@"2(_@eGB@>.)
@"N0/$%/"#@/"#?@$%/
"#?@0 >D(?N2(_I&. B.
(?9@"N1"22(_/;- D6>H2"
@)E@
7@"@>.)@ >D(?2(_@( D
#49@"N.2(_ @, >D(?2S2(_
@ 9/;- @"A(F@"N@2
(_G >D(?2S>./K7 4)*B?>R>
+1
3.3. Kiểu cơ sở
7 793: OD4
e/ 2e
/
9;. ? un/2
e 2e
h. ?[qprr
> 2>
h. ?[}spvspt
sˆ 2|
sˆ
h. ?[}`ptˆv`ptˆt
sˆ 2‘
sˆ
h. ?[qˆrr`r
| 2| h. ?[}psYtYv`ˆYv
psYtYv`ˆYt
`p 2‘
`p
h. ?[qYpxYxˆtpxr
ˆY 2|
ˆY
h. ?[
}xpp``tpq`ˆvrYttrvqv
xpp``tpq`ˆvrYttrvqt
ˆY 2‘
ˆY
h. ?[q
svYYˆtYYqt`tqxrrsˆsr
15
9
2|
d
8 G,>). ?2
D
‘
2‘
d
8 G,>). ?2D
@"(A
8 28
h. ?@J(
2
8K(
m
/
2m
/
(AAˆY>
‘ 2‘
( 2
(
7". ?^@"@
z/`p
2/
2
/
7(AA`p>
$/ˆ
Y
(>/
2m
>/
UAAˆY>
3.4. Kiểu Unit
7/@(#/<(I(1. ?@=N
s. ?)*&)/s@@"N. ?@.X<^@"
6
OC>+1$% 4. ?>+@"&A. ?,
. ?1@2S)*2b(,7)5)5@(
"#8%8{{
7=Ns. ?(A)*@I/()
h. ?)*(T /;- $% )*-QG&A. ?
#@"N. ?,I(,. ? 41- n
@"QG&A. ?,D. ?2S/@
O2A EQG. ?I(,@>’(“^R? IA-
(/QG@&A. ?: >D(?2S4>.@. ?
@&A@.@@")*2b(,
16
84>./^I1/;- )+]9N@"
( "#/;- 93:@.: /;- )+]6
@@"N+/ ? 4T/@B4(A1
/Cm;@@B4>?>GB/K/;- N&AO^(T$%
@"-4/"#/;- +]6)D~
/;- +]@N
3.5. Kiểu chuỗi
7K&.?(@I‘(
ygK2b(,(A].@i-j‰k@I&Hj’ž“k(T40
.@I^><(.0I(,)’ž“j@I&
k’ž“j@I>kŽ
D@I• )K-i->GB.(.0>
E@I)
3.6. Kiểu Tuple
}U?0W:-//@(#/@"DN.. ?N@@"A
7:-//;-*-.@jN@.kN+
I(,W:-/1p2Djspk
uu:-/1.@@.
jwwwswwpqwk
uu:-/1p>+
j{s>{sk
- 8E- W8.-6b^ (A^ Q.-6b].(A
-~
- U>(. ?-/@J-/(T[@N‰/Š
I(,W \j/22k‚j‰ŠŠ:7sq\8pŠp`k
d n‰–„Š
d n‰–„Šjk
17
3.7. Kiểu danh sách (List)
}U?0W\2/(N+.-6b1T@: $%
/2/>A>
}I(,W™sp`š
™‰- wcw wcw„wcwƒ Š š
- 8E- W8.-6b^ ^-^"
8.-6b-6.>g(AA-~
™-6bsc-6bpcc-6bš
U^>(.2D/D-W
™-6b6-6bšj(Tp(AAk
I(,W™ssqš
8MN<(2.>g.^A E/^- ^-^"W
I(W™n ssq}…˜š
O(2.N KW™š
- 8..
• :<(2.
//2s‚™scpc`š
• 9-6b/2)*/2@.W(T.b‰WWŠ
I(,W
\/s‚™scpc`š
\/p‚YWW/s
d n‰–„Š/p
• 9p/2)*s/2@.WmT.b•
I(,W
//2s‚™scpc`š
//2p‚™Ycrcˆš
18
//2sp‚/2s•/2p
//2ps‚/2p•/2s
9)>\2 $%/>A>D.b•j.bWWk<
/2/@B4+@" D/2
• O2- - 1/2
{|23-
{\
{y(
{:/
{|j|(&Wk
• 8.01\2
• di-@
\223-W@ K
\2&22W@ &NX<-6b4@
N@"
\2n //W@ &N-4'4.-6b4
@@"
• L-&-
\22 W2L-&->)^?
\22 eW) 4. ?/D~2L-&-
\22 ƒW) /2
:@W
\2z(W-6b6D4@
\2z(„//WA4-6b4@
\2z(|(&W)5z() 4(&1-6b
˜¥&<W
\2-
/\2-/pjk‚
/(‚™scpc`cYš
/ s‚(›…\2-jn&}…&{sk
- nw„((¦s¦2-‚–„w s
/ p‚(›…\2-2
19
- nw8 2 22-‚–„w p
/ `‚(›…\2-jn&}…j&&kk
- nw:-/-2-‚–„w `
• \C
\2z/
/\2-/ˆjk‚
/(‚™jw82wYkc
jwm2wrkc
jwOw`kc
jw3/-2wpkš
/ 2‚(›…\2z/ jnj&k}…\‡‚Yk
- nw„/2a2 2W–„w 2
• m
\2
/\2-/`jk‚
/(‚™w82wcwm2wcwOwcw3/-2wš
(›…\2 jn&}…- nwW–2w&k
• 8C
\22
/\2-/tjk‚
/(‚™jw82wYkc
jwm2wrkc
jwOw`kc
jw3/-2wpkš
/ 2‚(›…\22jnj&k}…n\‡‚Y
j&k/29k
- nw82n/2a2 2W–„w 2
20
3.8. Kiểu Sequence
} U?0WB/(.-6b1T@'
/. ? D1K-6b=)*I@6;2-6
b)*) <(NG52-6b9N.@.2B
6/2)2B/A E/•
m/s;-*-/.-6b1T@m#I@
.s;-*-/(#/)@"QGA4-6bd6b(
=)* I&A&b/J@ND6;<)*5
@(2.@"2b(,-6b
- I(,Wm.2D[ssqW2B‹ssqŒ
m>-)5.2[ssqW2B‹n &ssq}…&˜&Œ
- 8E- W8.>+&'(2B)R/2(T(A‹ŒN
2BR )
3.9. Kiểu Set
} U?0W72/@>(_;-*-O/21$%N
(T>(_;-*-)N@"-'>+.-6b@"
N.-6b T2/@(#/-+*-)/2jX.
-6bT@k)@./2RK@"-'>+.-6b
@"N.-6b T
} I(,W
2™scpc`š
2™ssqš
2™n &ssq(/(&˜&š
- 8E- WhE- 1/2)D[2R6A'/-i-
H[s/2s2
- 8..W
• di-22.>g}@.
2™scpc`š‚2™`cpcpcsš
2™scpc`š‡…2™`cpcpcsš
9 Q.-i-.22.‡……‚‡‚&
• di-*-W{
21
/ Y‚2™srš{2™`xš
- nw–„wj Yk
j2™srškj2™`sqšk
• di-
2j2™srškj2™`sqšk
/jŸksp‚ 2sp
2™sršŸ2™`sqš
• di-
2™srš}2™`sqš
3.10. Kiểu mảng Arry
}U?0W
7 /@(#/-+*-X.-6bT@N
;- &A>H.-6b>g=2
7 1$%)5@ "#
/ @.
7 />1F/;- / $%N-.•
.D/J5>41$/d
O4/;-*-#<(#/D/D-T@
=,•
- I(,W™›sp`›š
™›ssq›š
- 8E- W8E- 1„ )5)/2)^ ^-™››š8.
„ N/X
- :..-6b14W
{:<4W
/ ‚™›ssq›š
uu: I/A-6 [ ™`š RW
/ s‚ ™`š
uu: I/A-6 [ ™rš RW
/ p‚ ™rš
uu: I/A-6 [ ™`š ™ršW
/ `‚ ™`rš
- nw–„wj s p `k
{\A-6bW ™(&š
{:H-6bW ™(&š‡}r
22
{:.4 ™‡(& …‡(&3(…š<4
{\-&b/J4W
„ -
„ -
„ 2>
„ (
„ //
„ n //
3.11. Kiểu cấu trúc
8A E/@)*C@>.I-)5+
54N/<B452@>./-
™ >2š
-™22>/}(z š-}‚
2
-}(z}/2
(
uu
™ >2š
™‡ „ >…š
-™22>/}(z š-}‚
-}(z}/2
8A E/@ ?)*/) # - 2@7"
/->4A EN#0 ?UNN0/
E)*(T)&D.;-*-(#/GN2i-
:N@>.A Ep.7>.6D@"-4
/@>.4/)*D/<)*)&D2b(,@
(T[@N2 (N>GBI „ >R
(<@>.+p:I „ >NL/
:-}(z}/2/(2.?0@D8A
ENN@R< )(#/@4>>A>X
N@>.D^(
:DA E@"B@[+@>
/(@"+ )@INjN+R(<
k
m@"-i-@>/D@>. ) A E
>g[@N/:[@N/?0 )@)@"
23
-i-@R<. ?^?/• //j@R<6k:N
<@R<)@R<. ?. )8.
I@2.)5@(#/@.
-d`m‚
2
/&Wz/
/Wz/
/•Wz/
(
-dpm‚
2
/ZWz/
/§Wz/
aj&Wz/Wz/k‚‹Z‚&c§‚Œ
(
3.12. Kiểu delegate
7(//C))*m/)*
2b(, 93:D(TN/6)5..
„d|/DB
-(/}-‚(/n-s}…-p
: E- D-s/@12-p/@1 ? 4
m/N)*.. ?0-)5+1
h. ?)*. -21(/U
0(/@R<>g.CD/-D2b(,.b(
jkUD1A--)5
+>g.b(jk
m/)*C>g-)5+|@
24
-:2sjk‚
2> ((jW>Wk‚
{>
2> ((pjWkj>Wk‚
{>
> &„((jW>Wk‚
{>
> &„((pjWkj>Wk‚
{>
uum/s@2-/
-m/s‚(/nj˜k}…
uum/p@(2 (
-m/p‚(/n˜}…
/|@m/sj(/Wm/skjWkj>Wk‚
(/|@j>k
/|@m/pj(/Wm/pkjWkj>Wk‚
(/|@j>k
uu((/
/(/sWm/s‚am/sj:2s((k
/(/pWm/p‚am/pj:2s((pk
/2l>€‚:2sjk
uu((/
/(/`Wm/s‚am/sj2l>€„((k
/(/YWm/p‚am/pj2l>€„((pk
n j>k™jsqqpqqkcjsqpqkš(
- nw–({–(‚–(w>j|@m/s(/s>k
- nw–({–(‚–(w>j|@m/p(/p>k
- nw–({–(‚–(w>j|@m/s(/`>k
- nw–({–(‚–(w>j|@m/p(/Y>k
CHƯƠNG IV. CÁC CÂU LỆNH TRONG F#
4.1. For in do
e+(T(.-6b ;-*-)N((
2.4
25