-
[Haskell] #2 List(2) Range, list comprehension๊ณต๋ถ/ํจ์ํ ํ๋ก๊ทธ๋๋ฐ 2020. 1. 12. 13:23
Haskell์ ๋ฌดํ ๋ฆฌ์คํธ, ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฆฌ์คํธ๋ฅผ ์ฝ๊ฒ ์์ฑํ๋ ๋ฐฉ๋ฒ๋ ์ ๊ณตํฉ๋๋ค.
Range์ List Comprehension์ ์์๋ณด์ฃ !
์ง๋ํธ
2020/01/11 - [๊ณต๋ถ/ํจ์ํ ํ๋ก๊ทธ๋๋ฐ] - [Haskell] #1 List (1) ๊ธฐ๋ณธ์ ์ธ ์ฐ์ฐ๋ค
๊ฐ๋จํ๊ฒ Online IDE๋ก ํ ์คํธํด๋ณด๊ณ ์ถ๋ค! ์๋์ ๋ค์ด๊ฐ์ ์ ์ ๋ ฅํด๋ณด์ ๋ ์ฌ๋ฐ์ต๋๋ค
https://repl.it/languages/haskell
Range
์ฑ ๋ฒ์ญ์์๋ '๋ฒ์'๋ผ๊ณ ๋ฒ์ญ๋์ด ์์์ง๋ง, ์๋ฌธ์์ ๋์ค๋ range๊ฐ ์กฐ๊ธ ๋ ์ฝ๊ฒ ๋ค๊ฐ์ค๊ธฐ ๋๋ฌธ์ ์ด ์ฉ์ด๋ฅผ ๋์ ์ฌ์ฉํ๊ธฐ๋ก ํ์ต๋๋ค.
์ ์ํ๊ธฐ
[์์์์ .. ๋์์]
[1..20]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
['a'..'z']
"abcdefghijklmnopqrstuvwxyz"
์กฐ๊ฑด์ ์ฃผ๊ณ ์ถ๋ค๋ฉด
[์์์์, ๋๋ฒ์งธ์์ .. ๋์์]
[2,4..20]
[2,4,6,8,10,12,14,16,18,20]
//๋จ, ์ ํ ์์์ ์์ ์ฌ์ฉํ ๋๋ ์ฃผ์! ๋ฌดํ ๋๋ก ๊ณ์ฐ์ด ๋๊ธฐ ๋๋ฌธ์ ์์น ์๋ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์์ต๋๋ค.
[0.1, 0.3 .. 1][0.1,0.3,0.5,0.7, 0.8999999999999999, 1.0999999999999999]
๋ฌดํ ๋ฆฌ์คํธ
๋ฌดํ๋๋ก ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์, ๊ทธ ๊ฐ์ ๋ช ๊ฐ ๊ฐ์ ธ์ฌ ๊ฒ์ธ์ง ์ ์ฝํด์ฃผ์ด์ผ ํฉ๋๋ค. (์ ๊ทธ๋ฌ๋ฉด ํ์์ ๋ฌดํ๋๋ก ๊ณ์ฐํ๊ณ ์์ด์...)
๋ฌดํ ๋ฆฌ์คํธ[์์์์..]
take 10 [2..] //[2..] ๊ทธ๋ฅ ์ ๋ ฅํ์ง ๋ง์ธ์... ๋ฌดํ๋๋ก ์ถ๋ ฅํ๋๊น์ใ
[2,3,4,5,6,7,8,9,10,11]
์กฐ๊ฑด์ด ์๋ ๋ฌดํ ๋ฆฌ์คํธ
[์ฒซ๋ฒ์จฐ ์์, ๋๋ฒ์งธ ์์ .. ]
take 10 [2,4..]
[2,4,6,8,10,12,14,16,18,20]๋ด์ฉ์ด ๋ฐ๋ณต๋๋ ๋ฆฌ์คํธ
repeat, cycle, replicate์ ์ฌ์ฉํด ๊ตฌํํ ์ ์์ต๋๋ค.
cycle
์ฃผ์ด์ง ๋ฐฐ์ด ๋ด ์์๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
take 10 (cycle "hello world")
"hello worl"
take 10 (cycle [1,2,3])
[1,2,3,1,2,3,1,2,3,1]repeat
ํ ๊ฐ์ง ์์๋ฅผ ๋ฐ๋ณต ํฉ๋๋ค. ๋ค์ด์จ ๊ฐ์ด ๋ฆฌ์คํธ๋ฉด ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
repeat ๋ฐ๋ณตํ ๋ฆฌ์คํธ
take 10 (repeat "hello world")
["hello world","hello world","hello world","hello world","hello world","hello world","hello world","hello world","hello world","hello world"]replicate
๋ฐ๋ณต ํ์, ๋ฐ๋ณตํ ๊ฐ์ ๋ฐ์ ๊ทธ ํ์ ๋งํผ๋ง ๋ฐ๋ณตํด์ค๋๋ค.
replicate ๋ฐ๋ณตํ์ ๋ฐ๋ณตํ ๊ฐ
replicate 3 "hello world"
["hello world","hello world","hello world"]List Comprehension (๋ฆฌ์คํธ ํตํฉ)
์ด๊ฒ์ ๋ฆฌ์คํธ๋ฅผ ๊ฒ์ํ๊ณ ,์ด๋ํ๊ณ ํฉ์น๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํด ์ค๋๋ค.
์ํ์์์ Set Comprehension(์กฐ๊ฑด ์ ์๋ฒ)๊ณผ ์ ์ฌํ๋ค๊ณ ํ๋๋ฐ์, ํ ... ๊ธฐ์ต์ด ๋์ง ์๋ค์. ์กฐ๊ฑด ์ ์๋ฒ์ ์๋ ์ฒ๋ผ ์๊ฒผ๋ค๊ณ ํฉ๋๋ค.
x๋ 10๊ณผ ๊ฐ๊ฑฐ๋ ์์ ์์ฐ์ ์ด๊ณ , S๋ ์ด x์ 2๋ฅผ ๊ณฑํ ์งํฉ์ด๋ผ๋ ๋ป์ด๋๋๋ค. (์ํฌ์ ๋ ๋ชฌํด์ ๋จธ๋ฆฌ๊ฐ ๋ฒ์จ ํฐ์ง ๊ฑฐ ๊ฐ์ต๋๋ค)
๊ทธ๋ผ ์ด์ ํ์ค์ผ์์๋ ์ด๋ป๊ฒ ํ๋ ์ง ์์๋ณผ๊น์?
์ ์ํ๊ธฐ
[ ํํ ํ ์ (๋ณ์๊ฐ ๋ค์ด๊ฐ๊ฒ ์ฃ ?) | ์์ ๋ค์ด๊ฐ ๋ณ์๋ค์ ์กฐ๊ฑด ๋ฆฌ์คํธ ]
//์กฐ๊ฑด์ด 1๊ฐ ์ผ ๋
[ 2 * x | x <- [1..10] ]
[2,4,6,8,10,12,14,16,18,20]
//์กฐ๊ฑด์ด 2๊ฐ. ์ด ์ถ๊ฐ๋๋ ์กฐ๊ฑด์ predicate (์์ ๋ถ)๋ผ๊ณ ํ๊ธฐ๋ ํฉ๋๋ค.
[ x | x <- [50..100], x `mod` 7 == 3]
[52,59,66,73,80,87,94]
//๋ณ์๊ฐ 2๊ฐ
[x + y | x <- [1,2], y <- [3]]
//ํจ์์ ์ ๋ ฅ๊ฐ์ผ๋ก๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
length' list = sum [ 1 | _ <- list] // _๋ ๊ฐ์ ์ฌ์ฉํ์ง ์์ ๋ ์์ ๋ณ์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
length' [1,2,4]
3if ๋ฌธ์ด ๋ค์ด๊ฐ Comprehension
boomBangs xs = [ if x < 10 then "BOOM!" else "BANG!" | x <- xs, odd x] //์์ ๋ ์ฑ ์์ ๊ฐ์ ธ์์ต๋๋ค.
boomBangs [1..13]
["BOOM!","BOOM!","BOOM!","BOOM!","BOOM!","BANG!","BANG!"]์ด์ค ๋ฆฌ์คํธ๊ฐ ๋ค์ด๊ฐ List Comprehension
//๋ฌธ์์ด๋ char์ ๋ฆฌ์คํธ์ ๋๋ค!
[ x ++ " " ++ y | x <- ["hello", "good after noon", "good night"] , y<- ["lemon kim" , "stranger"] ]
["hello lemon kim","hello stranger","good after noon lemon kim","good after noon stranger","good night lemon kim","good night stranger"]ํ์คํ ํ์ค์ผ์์ ๋ฆฌ์คํธ ์ฐ์ฐ์ด ์ฐธ ํธ๋ฆฌํ ๊ฒ ๊ฐ์์! ํนํ ์กฐ๊ฑด์ ์ค์ ์์ฑํ๋ ๋ถ๋ถ์ด ํธํ๋ค์.
Swift์์์ ๋ฌธ๋ฒ๊ณผ ๋น์ทํ ๋ถ๋ถ์ด ์์ด์ ๋ฐ๊ฐ๊ธฐ๋ ํ๊ตฌ์ใ ใ
๋ค์์๋ Tuple์ ๋ํด์ ์์๋ณด๊ธฐ๋ก ํ ๊ฒ์! (์ฑ ์ ๊ตฌ์กฐ๋๋ก ๋ฐ๋ผ๊ฐ๋ ์ค์๋ค ใ ใ )
์ค๋๋ ์ข์ ํ๋ฃจ ๋ณด๋ด์ธ์!
'๊ณต๋ถ > ํจ์ํ ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Haskell] #5 Type (2) (0) 2020.01.20 [Haskell] #4 Type (1) (0) 2020.01.19 [Haskell] #3 Tuple (0) 2020.01.12 [Haskell] #1 List (1) ๊ธฐ๋ณธ์ ์ธ ์ฐ์ฐ๋ค (0) 2020.01.11 [Haskell] #0 Hello, Haskell! (0) 2020.01.09