More Related Content
What's hot
PPTX
python ์ํ์ดํดํ๊ธฐ PPTX
Python_numpy_pandas_matplotlib ์ดํดํ๊ธฐ_20160815 PPTX
ํ์ด์ฌ ๋ฌธ์์ด ์ดํดํ๊ธฐ PPTX
แแ
กแแ
ตแแ
ฅแซ แแ
ฎแซแแ
กแแ
งแฏ แแ
ตแแ
ขแแ
กแแ
ต PPTX
แแ
กแแ
ตแแ
ฅแซ Numpy แแ
ฅแซแแ
งแผแแ
ขแแ
ฎ แแ
ตแแ
ขแแ
กแแ
ต PPTX
แแ
กแแ
ตแแ
ฅแซ ๊ธฐ์ด PPTX
Processing ๊ธฐ์ด ์ดํดํ๊ธฐ_20160713 PPTX
แแ
กแแ
ตแแ
ฅแซ+แแ
ฅแผแแ
ฒแแ
ญแแ
งแซแแ
ตแจ+แแ
ตแแ
ขแแ
กแแ
ต 20160301 PPTX
Matplotlib ๊ธฐ์ด ์ดํดํ๊ธฐ_20160730 PDF
Start IoT with JavaScript - 4.๊ฐ์ฒด1 PPTX
PDF
PDF
PPTX
Python array.array ๋ชจ๋ ์ดํดํ๊ธฐ PDF
PDF
Start IoT with JavaScript - 5.๊ฐ์ฒด2 PDF
Start IoT with JavaScript - 2.์ฐ์ฐ์ PPTX
[์๊ฟ์ฌ] The C++ Programming Language 11์ฅ ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ PPTX
ํ์ด์ฌ ํฌ๋กค๋ง ๋ชจ๋ PDF
Viewers also liked
PPTX
ํ์ค์ผ ํ๋ก๊ทธ๋๋ฐ ์
๋ฌธ PDF
PDF
PPTX
PPTX
Next ๊ฒ์ ์ค์ ํ๋ก์ ํธ ์ฌ๋ผ์ด๋ PDF
Similar to Haskell study 2
PDF
ํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค์์ ์งํํ ์คํฐ๋ ๊ฐ์ ์๋ฃ์
๋๋ค(์ฝ๋ฉํ
์คํธ-ํ์ด์ฌ ํธ) PDF
PPTX
PPTX
PPTX
PDF
PDF
ํ์ด์ฌ2.7 ๊ธฐ์ด ๊ณต๋ถํ ๊ฒ ์ ๋ฆฌ PDF
๊ณ ๋ฑํ์ R&E Python summary for test PPTX
Sicp 2.2 ๊ณ์ธต ๊ตฌ์กฐ ๋ฐ์ดํฐ์ ๋ซํ ์ฑ์ง PPT
PDF
Python Programming: Type and Object PDF
PPTX
ํ์ค์ผ๋ก ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ๊ธฐ PDF
PDF
PDF
DOCX
DOCX
PDF
PDF
More from Nam Hyeonuk
PDF
PDF
๊ตฌ๋ฌธ๊ณผ ์๋ฏธ๋ก (์ ์ ์๋ฏธ๋ก ๊น์ง) PDF
Iocp ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํด PDF
Effective c++ chapter 1,2 ์์ฝ PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
Age Of Empires II : Age Of Kings Postmotem Haskell study 2
- 1.
- 2.
List - ํ๊ธฐ
list๋Haskell์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ์
๋๋ค. List๋ ๋์ผํ ํ์
์ ์๋ฃ๋ฅผ ๋ด๋
์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, ํ ์ธ์ด์์์ ๋งํฌ๋ ๋ฆฌ์คํธ(linked list)์ ๋์ผํ ๋ด๋ถ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์๋ค๊ณ
์๊ฐํ์๋ฉด ๋ฉ๋๋ค. ๋ฆฌ์คํธ๋ ๋๊ดํธ([]) ๋ฐ ์ฝค๋ง(,)๋ฅผ ์ด์ฉํ์ฌ ํํํฉ๋๋ค. ghci๋ฅผ ์ผ์
ํ์ธํด๋ด
์๋ค. ghci์์ ์ด๋ฆ(ํจ์)์ ์ ์ํ๋ ค๋ฉด let ํค์๋๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. ghci์์ let a = 3
์ด๋ผ๊ณ ์ฐ๋ ๊ฑด ์คํฌ๋ฆฝํธ ํ์ผ์์ a =3 ์ด๋ผ๊ณ ์ฐ๊ณ ghci์์ ๊ทธ ํ์ผ์ ์ฝ์ด์ค๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
Prelude> let numbers = [1,3,5,10,12]
Prelude> numbers
[1,3,5,10,12]
Prelude> let evens = [2,4,6,8,10,12]
Prelude> evens
[2,4,6,8,10,12]
- 3.
List - ํ๊ธฐ
Haskell์์๋ฌธ์์ด์ ๋ฌธ์๋ค์ ๋ฆฌ์คํธ์ ๋์ผํฉ๋๋ค. ๊ฐ ๋ฌธ์๋ ํ๋ฐ์ดํ(โ) ์ฌ์ด์ ๋ฌธ์๋ก
ํํ๋๋ฉฐ ๋ฌธ์์ด์ ์๋ฐ์ดํ(โ)์ฌ์ด์ ๋ฌธ์๋ค๋ก ํํ๋ฉ๋๋ค. [โ1โ,โ2โ,โ3โ]๊ณผ โ123โ์ ๊ฐ์
ํํ์
๋๋ค.
Prelude> [โ1โ,โ2โ,โ3โ]
โ123โ
Prelude> โ123โ
โ123โ
- 4.
List - ํ๊ธฐ
๋๊ฐ์ ์๋ก ๋ค๋ฅธ ๋ฆฌ์คํธ๋ฅผ ํฉ์น ๋๋ ++ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ++ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์ ์
์ด ์ฐ์ฐ์์ ์ํ ์๋๊ฐ ๊ต์ฅํ ๋๋ฆฌ๋ค๋ ๊ฒ์
๋๋ค. Haskell์ list๋ ๋ด๋ถ์ ์ผ๋ก linked list์ฒ๋ผ
๋์ํ๊ธฐ ๋๋ฌธ์, ++ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฐ์ฐ์์ ์ข์ธก์ ์๋ ๋ชจ๋ ์์๋ฅผ ํ ๋ฒ์ฉ ์ํํ๊ฒ ๋ฉ๋๋ค.
๋ฆฌ์คํธ์ ์์๋ฅผ ์ถ๊ฐํ ๋ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฐ์ฐ์๋ก : (cons) ์ฐ์ฐ์๊ฐ ์์ต๋๋ค. ์ด ์ฐ์ฐ์๋
๋ฆฌ์คํธ์ ๋งจ ์์ ์์ ํ๋๋ฅผ ์ถ๊ฐํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
Prelude> โ1234โ ++ โ5678โ
โ12345678โ
Prelude> 0:[1,2,3]
[0,1,2,3]
* ์ฐธ๊ณ ) ๋ฆฌ์คํธ [0,1,2,3]์ 0:1:2:3:[]๊ณผ ๊ฐ์ ๊ฒ์
๋๋ค.
- 5.
List - ํ๊ธฐ
๋ฆฌ์คํธ์๋ฆฌ์คํธ๊ฐ์ ๊ฒ๋ ์ผ๋ง๋ ์ง ๊ฐ๋ฅํฉ๋๋ค. ๋จ, ๋ฆฌ์คํธ๋ ๊ฐ์ ํ์
์ ์์๋ง ๋ด์ ์
์์ผ๋ฏ๋ก ๋ฆฌ์คํธ์ ๋ฆฌ์คํธ๊ฐ์ ๊ฒฝ์ฐ ๋ด๋ถ ๋ฆฌ์คํธ๋ค์ ํ์
์ด ์๋ก ๋์ผํด์ผํฉ๋๋ค. ๊ธธ์ด๋ ๋ฌ๋ผ๋
์๊ด์์ต๋๋ค.
Prelude> [ [1,2,3] , [1,2] , [5,6,7] ]
[[1,2,3],[1,2],[5,6,7]]
Prelude> [ โappleโ, โbananaโ ]
[โappleโ, โbananaโ ]
Prelude> [ [1,2,3], โappleโ ]
<interactive>:4:3:
No instance for <Num Char> arising from the literal โ1โ
In the expression : 1
In the expression : [1,2,3]
In the expression : [[1, 2, 3], โappleโ]
์๋ก ํ์
์ด ๋ค๋ฅธ ๋ฆฌ์คํธ๋ฅผ ํ
๋ฆฌ์คํธ์ ๋ฃ์ ๊ฒฝ์ฐ ์ด๋ ๊ฒ ์๋ฌ
๋ฉ์์ง๊ฐ ๋น๋๋ค
- 6.
List - ๋น๊ต
๊ฐ์ํ์
์ ๋ ๋ฆฌ์คํธ๋ ์๋ก ๋น๊ตํ ์ ์์ต๋๋ค. ๋ฌผ๋ก ๋ฆฌ์คํธ์ ์์ ํ์
์ด ์๋ก ๋น๊ต๋ ์ ์๋
ํ์
์ด์ด์ผํฉ๋๋ค. ๋ฆฌ์คํธ์ ๋น๊ต์ ๊ฒฝ์ฐ ์ฌ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ์ฒซ๋ฒ์งธ ์์๋ผ๋ฆฌ ๋น๊ตํด์ ํฐ
์ชฝ์ด ๋ ํฌ๊ณ , ์ฒซ๋ฒ์งธ ์์๊ฐ ์๋ก ๊ฐ๋ค๋ฉด ๋๋ฒ์งธ ์์๋ผ๋ฆฌ ๋น๊ตํด์ ํฐ ์ชฝ์ด ๋ ํฌ๊ณ , ... ํ๋ ์์ด์ฃ .
Prelude> [1,2,3] > [4,5,6]
False
Prelude> [1,2,3] > [1,2]
True
Prelude> [3,4,2] > [2,4]
True
Prelude> [3,4,2] == [3,4,2]
True
- 7.
List - ์ฐ์ฐ
๋ฆฌ์คํธ์์ํน์ ์ธ๋ฑ์ค์ ์๋ ์์์ ๊ฐ์ ๊ฐ์ ธ ์ค๊ณ ์ถ์ ๋๋ !! ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Prelude> [1,2,3,4] !! 2
3
head๋ ๋ฆฌ์คํธ์ ๋งจ ์ฒซ ๋ฒ์งธ ์์๋ฅผ, tail์ ๋งจ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ์ ๋ฆฌ์คํธ๋ฅผ
๋๋ ค์ฃผ๋ ํจ์์
๋๋ค.
Prelude> head [1,2,3,4]
1
Prelude> tail [1,2,3,4]
[2,3,4]
- 8.
List - ์ฐ์ฐ
lastํจ์๋ ๋ฆฌ์คํธ์ ๋งจ ๋ง์ง๋ง ์์๋ฅผ, init ํจ์๋ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์์๋ฅผ ์ ์ธํ ๋๋จธ์ง ์์๋ค์
๋ฆฌ์คํธ๋ฅผ ๋๋ ค์ฃผ๋ ํจ์์
๋๋ค.
Prelude> last [1,2,3,4]
4
Prelude> init [1,2,3,4]
[1,2,3]
์๋ ๊ทธ๋ฆผ์ฒ๋ผ ์๊ฐํ์๋ฉด ํธํฉ๋๋ค.
[1,2,3,4,5,6,7,8,9,10]
head tail
lastinit
- 9.
List - ์ฐ์ฐ
length๋๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผ ๋๋ ค์ค๋๋ค.
Prelude> length [1,2,3,4]
4
null์ ๋ฆฌ์คํธ๊ฐ ํ
๋น์๋์ง ์๋์ง ํ์ธํด์ฃผ๋ ํจ์์
๋๋ค. list == [] ์ ๊ฐ์ ์กฐ๊ฑด๋ฌธ ๋ณด๋ค๋ ์ด
ํจ์๋ฅผ ์ฐ๋ ํธ์ด ํธํฉ๋๋ค.
Prelude> null [1,2,3,4]
False
Prelude> null []
True
- 10.
List - ์ฐ์ฐ
reverse๋๋ฆฌ์คํธ๋ฅผ ๊ฑฐ๊พธ๋ก ๋ค์ง์ด์ค๋๋ค.
Prelude> reverse [1,2,3,4]
[4,3,2,1]
take๋ ์ซ์์ ๋ฆฌ์คํธ๋ฅผ ์ธ์๋ก ๋ฐ์ ๋ฆฌ์คํธ์ ์์์ ๋ถํฐ ํด๋น ๊ฐ์๋งํผ์ ์์๋ก ์ด๋ฃจ์ด์ง
๋ฆฌ์คํธ๋ฅผ ๋ฐํํฉ๋๋ค.
Prelude> take 3 [1,2,3,4]
[1,2,3]
Prelude> take 5 [1,2,3,4]
[1,2,3,4]
- 11.
List - ์ฐ์ฐ
drop์๋ฐ๋๋ก ์ฃผ์ด์ง ๊ฐ์๋งํผ์ ์์๋ฅผ ๋ฆฌ์คํธ์ ์์์ ๋ถํฐ ์ ๊ฑฐํฉ๋๋ค.
Prelude> drop 3 [1,2,3,4]
[4]
Prelude> drop 5 [1,2,3,4]
[]
maximum / minimum์ ๊ฐ๊ฐ ๋ฆฌ์คํธ์ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๋ฐํํฉ๋๋ค.
Prelude> maximum [1,2,3,4]
4
Prelude> minimum [1,2,3,4]
1
- 12.
List - ์ฐ์ฐ
sum/ product๋ ๊ฐ๊ฐ ๋ฆฌ์คํธ์ ์์๋ค ๋ชจ๋๋ฅผ ๋ํ ๊ฐ๊ณผ ๋ชจ๋๋ฅผ ๊ณฑํ ๊ฐ์ ๋ฐํํฉ๋๋ค.
Prelude> sum [1,2,3,4]
10
Prelude> product [1,2,3,4]
24
elem์ ์์ ํ๋์ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์์ ํด๋น ์์๊ฐ ๋ฆฌ์คํธ์ ํฌํจ๋๋์ง ์๋์ง ์ฌ๋ถ๋ฅผ ํ๋ณํด์ค๋๋ค.
Prelude> โaโ `elem` โabcdโ
True
Prelude> 3 `elem` [1,2,4,5]
False
- 13.
List - ๋ฒ์
Haskell์๋ํน์ ๋ฒ์์ ์๋ ๊ฐ๋ค์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ ์ข์ ๋ฌธ๋ฒ์ด ์์ต๋๋ค.
๋ฒ์(range) ๋ฆฌ์คํธ๋ ํน์ ๋ฒ์์ ์๋ ๋ฑ์ฐจ ์์ด์ ์ฝ๊ฒ ๋ง๋ค์ด๋
๋๋ค.
Prelude> [1..10]
[1,2,3,4,5,6,7,8,9,10]
๊ธฐ๋ณธ์ ์ผ๋ก [(์์๊ฐ)..(์ข
๋ฃ๊ฐ)] ํํ์ ๋ฌธ๋ฒ์ ๊ฐ๊ณ ์์ผ๋ฉฐ ์ด๋ฐ ํํ์ ๋ฆฌ์คํธ๋ ์์๊ฐ์์ ๊ฐ์
ํ๋์ฉ ์ฆ๊ฐ์ํค๋ฉฐ ์ข
๋ฃ๊ฐ๊น์ง์ ๋ชจ๋ ์์๋ค์ ํฌํจํ๋ ๋ฆฌ์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
Prelude> [โaโ..โzโ]
โabcdefghijklmnopqrstuvwxyzโ
Prelude> [โAโ..โFโ]
โABCDEFโ
- 14.
List - ๋ฒ์
๊ฐ์์ฆ๊ฐ ์ ๋๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ์ฒซ๋ฒ์งธ ์์์ ๋๋ฒ์งธ ์์๊น์ง ํ๊ธฐํด์ฃผ๋ฉด ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ ๊ฒฝ์ฐ
๋ ์์์ ์ฐจ์ด๋งํผ ๊ฐ์ ์ฆ๊ฐ์ํค๋ฉฐ ์ฃผ์ด์ง ๋ฒ์ ๋ด์ ์์๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
Prelude> [1,4..10]
[1,4,7,10]
Prelude> [โaโ,โcโ..โzโ]
โacegikmoqsuwyโ
Prelude> [0.1, 0.3 .. 1]
[0.1,0.3,0.5,0.7,0.899999999999,1.0999999999999]
๋ถ๋ ์์์ ์ ๊ฒฝ์ฐ ์ ์์ ์ฒ๋ผ ๋ถ์ ํํ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์์ผ๋ฏ๋ก ์ด ๋ฌธ๋ฒ์์๋ ๋ถ๋ ์์์ ์
๋๋๋ก ์ ์ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- 15.
List - ๋ฒ์:๋ฌดํ
Haskell์์ง์ฐ ๊ณ์ฐ์ด๋ผ๋ ํน์ง์ ์ด์ฉํด์ ๋ฌดํ๋ ํฌ๊ธฐ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด๋ผ ์ ์์ต๋๋ค. ์์
๋ฒ์ ๋ฆฌ์คํธ์์ ๋ง์ง๋ง ๊ฐ์ ์๋ตํ๋ฉด ๊ณง ๋ฌดํ๋ ํฌ๊ธฐ์ ๋ฆฌ์คํธ๊ฐ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ง์๋ค์
๋ฆฌ์คํธ๋ฅผ ์๊ฐํด๋ด
์๋ค.
Prelude> let evens = [2,4..]
์ด์ evens๋ ์ง์๋ค์ ๋ฆฌ์คํธ์
๋๋ค. ์ด๋ ๊ฒ evens๋ฅผ ์ ์ํ๋ ์์ ๊น์ง๋ ์ง์ฐ ๊ณ์ฐ์
ํน์ฑ๋๋ฌธ์ ํด๋น ์์ ๊ณ์ฐํ์ง ์์ต๋๋ค. ์ด์ ์ฒ์๋ถํฐ 10๊ฐ์ ์ง์๋ฅผ ๊ฐ์ ธ์๋ด
์๋ค.
Prelude> take 10 evens
[2,4,6,8,10,12,14,16,18,20]
๋ฌดํ๋ ํฌ๊ธฐ์ ๋ฆฌ์คํธ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ๋ฌดํ๋ ๋ฆฌ์คํธ์ ๊ด๋ จ๋ ํจ์๋ฅผ ์ดํด๋ด
์๋ค.
- 16.
List - ๋ฒ์:๋ฌดํ
cycleํจ์๋ ๋ฆฌ์คํธ๋ฅผ ์ธ์๋ก ๋ฐ์ ๊ทธ ๋ฆฌ์คํธ์ ์์๋ฅผ ๋ฌดํํ ๋ฐ๋ณตํ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด๋
๋๋ค.
Prelude> take 10 (cycle [1,2,3])
[1,2,3,1,2,3,1,2,3,1]
Prelude> take 12 (cycle โEE! โ)
โEE! EE! EE! โ
repeat๋ ์์๋ฅผ ํ๋ ๋ฐ์์ ๊ทธ ์์๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌดํ๋ ํฌ๊ธฐ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
Prelude> take 5 (repeat 3)
[3,3,3,3,3]
take n (repeat k)๋ replicate n k์ ๊ฐ์ต๋๋ค. ์ ์์ ์ ๊ฒฝ์ฐ ๋ณดํต replicate 5 3๊ณผ ๊ฐ์ด ์๋๋ค.
- 17.
List Comprehension
list comprehension์list๋ฅผ ๋ง๋ค ๋ ๊ต์ฅํ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ ๋ฌธ๋ฒ์
๋๋ค. ์ด ๋ฌธ๋ฒ์
์ํ์์ ์งํฉ์ ํ๊ธฐํ ๋ ์ฌ์ฉํ๋ ์กฐ๊ฑด์ ์๋ฒ๊ณผ ์์ฃผ ๋น์ทํฉ๋๋ค. ๊ฐ์ฅ ์ฒ์ 10๊ฐ์ ์ง์๋ฅผ
๋ํ๋ด๋ ๋ฆฌ์คํธ๋ฅผ list comprehension์ ์ด์ฉํด ํ๊ธฐํด๋ด
์๋ค.
Prelude> [x*2 | x <- [1..10]]
[2,4,6,8,10,12,14,16,18,20]
list comprehension์์ ํ์ดํ(|) ์ผ์ชฝ์ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ๋ค์ด๊ฐ ์์๋ฅผ ๋ํ๋ด๊ณ , ํ์ดํ
์ค๋ฅธ์ชฝ์ ๊ทธ ์์๋ฅผ ๊ตฌํ๊ธฐ ์ํ ์ฌ๋ฌ๊ฐ์ง ์กฐ๊ฑด๋ค์ ์๋ฏธํฉ๋๋ค. ์ ์ฝ๋์์ x <- [1..10]์ ํตํด x
๋ ๋ฆฌ์คํธ [1..10] ์์ ์ํ๋ ์์์์ ๋ํ๋ด๊ณ , ๊ทธ ๊ฐ๊ฐ์ x์ ๋ํด 2๋ฅผ ๊ณฑํ ๊ฐ์ด ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์
ํฌํจ๋๋ค๊ณ ํ๊ธฐํ์ผ๋ฏ๋ก ์ต์ข
์ ์ผ๋ก ์ฒซ 10๊ฐ์ ์ง์ ๋ฆฌ์คํธ๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค.
- 18.
List Comprehension
๋ช ๊ฐ์ง์์ ๋ฅผ ๋ ์ดํด๋ด
์๋ค. ์ฐ์ , ์ฒซ 10๊ฐ์ ์ง์ ์ค์์ ํฌ๊ธฐ๊ฐ 10์ด์์ธ ์ง์๋ค์ ๋ฆฌ์คํธ๋ฅผ
list comprehension์ ํตํด ๊ตฌํด๋ด
์๋ค. ์ด๋ฅผ ์ํด์ ํ์ดํ(|) ์ค๋ฅธ์ชฝ์ ์กฐ๊ฑด(์ ์ด)๋ฅผ ๋ํด์ค ์
์์ต๋๋ค.
Prelude> [x*2 | x <- [1..10], x*2 >= 10]
[10,12,14,16,18,20]
1๋ถํฐ 20 ์ฌ์ด์ ์ซ์์ค 3 ๋๋ 5์ ๋ฐฐ์๋ ์ด๋ป๊ฒ ๊ตฌํ ์ ์์๊น์?
Prelude> [x | x <- [1..20], x `mod` 3 == 0 || x `mod` 5 == 0]
[3,5,6,9,10,12,15,18,20]
- 19.
List Comprehension
list comprehension์์์ ์ด๋ฅผ ์ฌ๋ฌ ๊ฐ ์ค ์๋ ์์ผ๋ฉฐ, ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ๋ฆฌ์คํธ๋ก๋ถํฐ ์์๋ฅผ
๊ฐ์ ธ์ฌ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด์, [1,2,3]๊ณผ [4,5,6]์ ๋ชจ๋ ์์๋ค์ ๊ณฑ์ผ๋ก ์ด๋ฃจ์ด์ง ์์๋ฅผ
๋ง๋ค๊ณ ์ถ๋ค๊ณ ํด ๋ด
์๋ค.
Prelude> [x*y | x <- [1,2,3], y <- [4,5,6] ]
[4,5,6,8,10,12,12,15,18]
Prelude> [x*y | x <- [1,2,3], y <- [4,5,6], x*y > 10]
[12,12,15,18]
์ด๊ฑด ๋ง์น ๋ช
๋ นํ ์ธ์ด์์ ์ด์ค ๋ฐ๋ณต๋ฌธ์ฒ๋ผ ๋์ํฉ๋๋ค. [1,2,3]์์ ์์๋ค์ ํ๋์ฉ ๊บผ๋ด๊ณ , ๊ทธ
์์ ๊ฐ๊ฐ์ ๋ํด y์ ๋ชจ๋ ์์๋ค์ ๋์์ํค๋ฉด์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ
์คํธํด๋ด
๋๋ค.
- 20.
List Comprehension
list comprehension์ญ์ ์ค์ฒฉํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด list์ list์์ ๋ด๋ถ์ list๋ค์
๋ํด ์ง์์ธ ์์๋ค์ ๋ชจ๋ ์ ๊ฑฐํ๊ณ ์ถ๋ค๊ณ ํด ๋ด
์๋ค.
first.hs
removeOdd xxs = [ [ x | x <- xs, odd x] | xs <- xxs]
ghci
Prelude> :l first.hs
Prelude> removeOdd [[1,2,3,4], [5,6,7,8], [2,4,6,8], [1,3,5,7]]
[[1,3],[5,7],[],[1,3,5,7]]
list comprehension์ ์ค์ฒฉํด์ ์ธ ๊ฒฝ์ฐ ๊ฐ๋
์ฑ์ด ๋ณ๋ก ์ข์ง ์์ต๋๋ค. ์ด๋ด ๋ ์ฌ๋ฌ ์ค์ ๋๋ ์
์ฐ๊ฑฐ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฑธ ๊ณ ๋ฏผํด๋ณด์๋ ๊ฒ ์ข์ต๋๋ค.
- 21.
์ฐ์ต ๋ฌธ์
โข lastButOne
list๊ฐ ์ฃผ์ด์ง๋ฉดํด๋น ๋ฆฌ์คํธ์ ๋ง์ง๋ง์์ ํ ์นธ ์ ์์๋ฅผ ๋ฆฌํดํ๋ ํจ์๋ฅผ ์์ฑํด๋ด
์๋ค. ์๋ฅผ ๋ค์ด
lastButOne [1,2,3,4]๋ 3์ ๋ฆฌํดํด์ผํฉ๋๋ค.
โข notCapital
๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋ ํด๋น ๋ฌธ์์ด์์ ๋๋ฌธ์๋ฅผ ์ ๊ฑฐํ ๋ฌธ์์ด์ ๋ฆฌํดํ๋ ํจ์๋ฅผ ์์ฑํด๋ด
์๋ค.
์๋ฅผ ๋ค์ด notCapital โHaHaHa, NotCapitalโ ์ โaaa, otapitalโ์ ๋ฆฌํดํด์ผํฉ๋๋ค.
โข diff
๋ ๊ฐ์ ๋ฆฌ์คํธ a,b๊ฐ ์ฃผ์ด์ก์ ๋ a์ ์์ ์ค b์ ํฌํจ๋์ง ์๋ ์์๋ก๋ง ๊ตฌ์ฑ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฆฌํดํ๋
ํจ์๋ฅผ ์์ฑํด๋ด
์๋ค. ์๋ฅผ ๋ค์ด diff [1,2,3,4,5,6] [3,5,7] ์ [1,2,4,6]์ ๋ฆฌํดํด์ผํฉ๋๋ค.
- 22.
tuple
tuple์ list์ ๋น์ทํ๊ฒ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๋ด๋ ์๋ฃ๊ตฌ์กฐ์
๋๋ค. tuple์ด list์ ์ฐจ์ด ๋๋ ๋ ๊ฐ์ง๋,
tuple์ ์์ ๊ฐ์๊ฐ ๊ณ ์ ์ด๋ฉฐ ์๋ก ๋ค๋ฅธ ํ์
์ ๊ฐ๋ ๋ด์ ์ ์๋ค๋ ๊ฒ์
๋๋ค. tuple์ ์๊ดํธ์
์ฝค๋ง๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ํํ์ ์ํ์์ ๋ฒกํฐ ๋ฑ์ ํ๊ธฐํ๋๋ฐ ๊ต์ฅํ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
ํํ์ ํ ๊ฐ์ง ํน์ง์ ์์ ๊ฐ์๊ฐ ๋ค๋ฅด๋ฉด ์๋ก ๋ค๋ฅธ ํ์
์ด๋ผ๋ ๊ฒ์
๋๋ค.
Prelude> [(1,2), (1,2,3)]
<interactive>:2:9:
Couldnโt match expected type โ(t, t3)โ
with actual type โ(t0, t1, t2)โ
Relevant bindings include
it :: [(t, t3)] (bound at <interactive>:2:1)
In the expression: (1,2,3)
In the expression: [(1,2), (1,2,3)]
In an equation for โitโ : it = [(1,2), (1,2,3)]
์ด๋ ๊ฒ ์๋ก ๋ค๋ฅธ
ํ์
์ ํ ๋ฆฌ์คํธ์
๋ด์ ์ ์๋ค๋ ์๋ฌ
๋ฉ์์ง๊ฐ ๋ฐ์ํฉ๋๋ค.
- 23.
tuple
ํํ์ ์ํ์์์ 2์ฐจ์,3์ฐจ์ ๋ฒกํฐ ๋ฑ์ ํ๊ธฐํ ๋๋, ์๋ก ๋ค๋ฅธ ํ์
์ ๊ฐ ๋ช ๊ฐ์ง๋ฅผ ๋ฌถ์ด์
๊ด๋ฆฌํ ํ์๊ฐ ์์ ๋ ๊ต์ฅํ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํฌ๊ธฐ๊ฐ 2์ธ ํํ์ ํ์ด(pair), 3์ธ
ํํ์ ํธ๋ฆฌํ(triple)์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ํ์ด์ ๊ฒฝ์ฐ fst์ snd ํจ์๊ฐ ์ ์ฉํฉ๋๋ค.
Prelude> fst (1,4)
1
Prelude> snd (1,4)
4
fst์ snd ํจ์๋ ํฌ๊ธฐ๊ฐ 2์ธ ํํ์์๋ง ์ฌ์ฉ๊ฐ๋ฅํฉ๋๋ค. 3-tuple, 4-tuple, ... ๋ฑ์ ๋ํด์๋
๋์ํ์ง ์์ต๋๋ค. ์ด๋ฐ ๋ค์ํ ํฌ๊ธฐ์ ํํ์ ๋ํด ๊ฐ ์์๋ค์ ๋ฝ์๋ด๋ ๋ฐฉ๋ฒ์ ๋ค์์ ๋ค๋ค๋ด
์๋ค.
- 24.
tuple
pair๋ค์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด๋ด๋zip์ด๋ผ๋ ๊ต์ฅํ ์ ์ฉํ ํจ์๊ฐ ์์ต๋๋ค. ์ด ํจ์๋ ๋ ๊ฐ์
๋ฆฌ์คํธ๋ฅผ ์ธ์๋ก ๋ฐ์ ๋ ๋ฆฌ์คํธ์ ์์๋ฅผ ํ๋์ฉ ์ง ์ง์ ํ์ด๋ค์ ๋ฆฌ์คํธ๋ฅผ ๋ฐํํฉ๋๋ค.
Prelude> zip [โoneโ, โtwoโ, โthreeโ] [1,2,3]
[(โoneโ,1), (โtwoโ,2), (โthreeโ,3)]
Prelude> zip [1..] โabcdโ
[(1,โaโ), (2,โbโ), (3,โcโ), (4,โdโ)]
zip์ ๋ ๊ฐ์ ๋ฆฌ์คํธ๋ฅผ ํ๋๋ก ํฉ์น๊ฑฐ๋ ๋ ๋ฆฌ์คํธ๋ฅผ ๋์์ ์ํํด์ผํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์
์์ต๋๋ค. zip์ ์ธ์๋ก ๋ค์ด์จ ๋ ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ ์๋ก ๋ค๋ฅผ ๊ฒฝ์ฐ ๊ธธ์ด๊ฐ ์งง์ ์ชฝ์ ๋ฆฌ์คํธ์ ๋ง์ถฐ์
์๋ฆฝ๋๋ค.
- 25.
ํ์ฉ
tuple๊ณผ list๋ฅผ ์ด์ฉํด์๋ค์ ๋ฌธ์ ๋ฅผ ํ์ด๋ด
์๋ค.
โ์ธ ๋ณ์ ๊ธธ์ด๊ฐ ๋ชจ๋ 10์ดํ์ ์ ์์ธ ์ผ๊ฐํ ์ค์์, ๋๋ ๊ฐ 24์ธ ์ง๊ฐ ์ผ๊ฐํ์๋ ์ด๋ค ๊ฒ์ด
์๋๊ฐ?โ
์ด ๋ฌธ์ ๋ list comprehension๊ณผ tuple์ ์ด์ฉํ๋ฉด ๊ต์ฅํ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค. ์ฐ์ list
comprehension์ ์ด์ฉํด ์ธ ๋ณ์ ๊ธธ์ด๊ฐ ๋ชจ๋ 10์ดํ์ธ ์ผ๊ฐํ ๋ชฉ๋ก์ ๊ตฌํด๋ด
์๋ค.
[(a,b,c) | c <- [1..10], b <- [1..10], a <- [1..10]]
- 26.
ํ์ฉ
์ฌ๊ธฐ์ ์ง๊ฐ ์ผ๊ฐํ์๊ฒฝ์ฐ ๋น๋ณ ๊ธธ์ด์ ์ ๊ณฑ์ ๋๋จธ์ง ๋ ๋ณ์ ๊ธธ์ด์ ์ ๊ณฑ์ ํฉ๊ณผ ๊ฐ์ผ๋ฉฐ,
์ง๊ฐ์ผ๊ฐํ์ ๊ฐ ๋ณ์ ๋น๋ณ์ ๊ธธ์ด๋ณด๋ค ๊ธธ ์ ์๋ค๋ ์กฐ๊ฑด์ ๋ฐ์ํด๋ด
์๋ค.
[(a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b],
a^2 + b^2 == c^2]
์ด์ ์ฐ๋ฆฌ๊ฐ ๊ณ ๋ คํ์ง ์์ ์กฐ๊ฑด์ ๋๋ ๊ฐ 24๋ผ๋ ์กฐ๊ฑด ํ๋๋ฟ์
๋๋ค. ์ด ์กฐ๊ฑด ํ๋๊น์ง ๋ฐ์ํด์
๋ต์ ๊ตฌํด ๋ด
์๋ค.
Prelude> [(a,b,c)| c <- [1..10], b <- [1..c], a <- [1..b],
a^2 + b^2 == c^2, a+b+c==24]
[(6,8,10)]
- 27.
์ฐ์ต ๋ฌธ์
โข swap
ํ์ด์ ๋ฆฌ์คํธ๋ฅผ๋ฐ์์ ๋ฆฌ์คํธ์ ๋ชจ๋ ์์๋ฅผ ์์๋ฅผ ๋ฐ๊พธ๋ ํจ์๋ฅผ ๋ง๋ค์ด๋ด
์๋ค. ์๋ฅผ ๋ค์ด
swap [(1,2), (3,4), (5,6), (7,8)]์ [(2,1), (4,3), (6,5), (8,7)]์ ๋ฆฌํดํด์ผํฉ๋๋ค.
โข sum
๋ฆฌ์คํธ๋ฅผ ๋ฐ์์ ๋ฆฌ์คํธ์ ๋ชจ๋ ์์์ ํฉ์ ๊ตฌํ๋ ํจ์๋ฅผ ๋ง๋ค์ด๋ด
์๋ค. ์ด๋ฏธ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
์กด์ฌํ๋ ํจ์๋ sum ์ธ์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์์ฑํ์
์ผํฉ๋๋ค. ์๋ฅผ ๋ค์ด sumโ [1,2,3,4,5] ๋ 15๋ฅผ
๋ฆฌํดํด์ผํฉ๋๋ค.
โข divisors
์ซ์ ํ๋๋ฅผ ๋ฐ์ ๊ทธ ์ซ์์ ๋ชจ๋ ์ฝ์ ๋ฆฌ์คํธ๋ฅผ ๋ฆฌํดํ๋ ํจ์๋ฅผ ๋ง๋ค์ด๋ด
์๋ค. ์๋ฅผ ๋ค์ด
divisors 20 ์ [1,2,4,5,10,20]์ ๋ฆฌํดํด์ผํฉ๋๋ค.