๐ archive29 [Haskell Tutorial] Data Type ๐ data ํ์ Haskell ์์ ํ์ ์ ์ ์ํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ ์ค ํ๋๋ data ์ ๋๋ค. data = | | | ... newtype ๊ณผ ๋ค๋ฅด๊ฒ ์ฌ๋ฌ ํ์ ์ธ์๋ฅผ ๋ฐ์ ์ ์๊ณ , ์ฌ๋ฌ constructor ๋ฅผ ํ๋์ ํ์ ์ ๋งค์นญ์ํฌ ์ ์๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. constructor ๋ค์ ํ์ ์ธ์๋ 0๊ฐ ์ด์์ ์ ์ํ๋ฉด ๋ฉ๋๋ค. ๋ค์์ data ์ ์์์ ๋๋ค. data Bool = True | False ์ด์งธ ํํ๊ฐ ์ฐ๋ฆฌ๊ฐ ํํ ์ฌ์ฉํ๋ enum ๊ณผ ๋ง์ด ๋ฎ์์์ง์๋์? ๋๋ค๋ฅธ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. data Person = Person String Int -- ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ์ธ์๋ก ๋ฐ๋ Person ํ์ ์๋ ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ์ธ์๋ก ๋ฐ๋ Person ํ์ ์ ์ ์ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์์ ๊ฐ์ด .. 2022. 12. 31. [Haskell Tutorial] Recursion ๐ ๋ฐ๋ณต๋ฌธ ๋์ ์ฌ๊ท๋ก Haskell ์์๋ ๋ฐ๋ณต์ ์ํํ๊ธฐ ์ํด loop ๋ฅผ ์ํํ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๊ท ๋ฅผ ํ์ฉํฉ๋๋ค. ๐ Tail Call Elimination ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ๊ทํธ์ถ ์ ์ฝ์คํ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ด์๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ํ์ง๋ง Haskell ๊ณผ ๊ฐ์ ํจ์ํ ์ธ์ด์์๋ Tail-Call Elimination ๋ฅผ ํตํด ์ต์ ํ๋ฅผ ์ํํฉ๋๋ค. ๐ Lazy Evaluation Haskell ์ ์ง์ฐ ํ๊ฐ๋ฅผ ํตํด ์คํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ด ํ์ํ ์์ ์ ํ๊ฐ๋ฅผ ํ๋ฉฐ ํ์ํ์ง ์๋ค๋ฉด ํ๊ฐํ์ง ์์ต๋๋ค. ๐ ์์ ๋ก ์ตํ๊ธฐ maximum ์ ๋ฆฌ์คํธ์ ์์ ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐํํ๋ ํจ์์ ๋๋ค. maximum' [] = error "maximum of empty list" .. 2022. 12. 31. [Haskell Tutorial] High Order Function ์ด๋ฒ ํฌ์คํธ๋ http://learnyouahaskell.com/higher-order-functions ์ ๊ทผ๊ฑฐํ๊ณ ์์ต๋๋ค. ๐ ๊ณ ์ฐจํจ์ (High Order Function) ๊ณ ์ฐจํจ์ ๋ ํจ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ค ์ ์๊ณ , ๋ฐํ๊ฐ์ผ๋ก๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ๋ง๋๋ก ํจ์๋ฅผ ๊ฐ์ผ๋ก ์ทจ๊ธํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๐ ์ปค๋ง (Currying) Haskell ๋ค์ค์ธ์ ํจ์์ ์ ์ฒด ํ์ค์ผ์ ํจ์๋ ํ๋์ ์ธ์๋ง ๋ฐ์ ์ ์๋๋ก ๋์ด์๋๋ฐ, ์ด๋ป๊ฒ ์ฌ๋ฌ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋ ํจ์๋ฅผ ๊ตฌํํ ์ ์๋ ๊ฒ์ผ๊น์? ๋ ์ธ์๋ฅผ ๋ฐ์ ํฐ ๊ฐ์ ๋ฐํํ๋ ํจ์ max ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ๋จ๊ณ๋ก ๋๋ ๋ณผ ์ ์์ต๋๋ค. ghci> max 4 20 20 {- โ ์ ํํ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฆฌํ ์ ์๋ค. -} ghci> maxVa.. 2022. 12. 31. [Haskell Tutorial] Module ๐ Module ๋ชจ๋์ด๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ํ์ผ ๋จ์์ API (ํจ์ ๋ฐ ํ์ ๋ค) ๋ญ์น์ ๋๋ค. Haskell ์์๋ ๊ฐ๊ฐ์ ํ์ผ์ด ํ๋์ ๋ชจ๋์ ๋๋ค. ๋ชจ๋์ ์๋ฌธ๋๋ฌธ์๋ก ์์ํ๋ ์ด๋ฆ์ ๊ฐ์ง๋ฉฐ(Html.hs), ๋ชจ๋์ ์ ์ํ๋ ์ชฝ์์ ์ธ๋ถ๋ก ๊ณต๊ฐํ๊ธฐ๋ฅผ ์ํ๋ API ๋ค์ ์ง์ ํ ์ ์์ต๋๋ค. -- Html.hs module Html ( Html , Title , Structure , html_ , p_ , h1_ , append_ , render ) where -- ... ๊ฐ๊ฐ์ API ๋ค์ ๋ํ ๊ตฌํ๋ถ ๐ Internal Module ์์ module ์ export ํ ๋ฐฉ์์ private ํ ๊ธฐ๋ฅ๋ค์ ์ ๊ทผํ์ง ๋ชปํ๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. Haskell ์์๋ ์ด๋ฌํ ๊ฒฝ์ฐ module ์ ๋ชจ๋ ์ ๊ทผ.. 2022. 11. 28. [Haskell Tutorial] Type ๐ ํ์ ์ถ๋ก Haskell ์ ํ์ ์ถ๋ก ์ด ๊ฐ๋ฅํ์ง๋ง ๋ณดํต ๋ช ์์ ์ผ๋ก ํ์ ์ ๋ช ์ํ๋ ๊ฒ์ด ๋ฏธ๋์ ๋์ ๋ค๋ฅธ ์ด๋ค์ ์ํด ๋ ๋์ ์ ํ์ ๋๋ค. ํ์ ์ ์๋ณ์ ์์ :: ์ ํจ๊ป ๋ช ์ํฉ๋๋ค. title_ :: String -> String ์ ํ์ ์ String ์ ์ธ์๋ก ๋ฐ์ String ์ ๋ฐํํ๋ ํจ์๋ฅผ ์๋ฏธํ๋ ๊ฒ์ด์ฃ . ๐ Haskell ์ ํจ์๋ ์ผ๊ธ ํด๋์ค๋ค. ์ฌ์ค ์์ ๋ชจ๋ ์์ ์์ 2๊ฐ ์ด์์ ์ธ์๋ฅผ ๋ฐ๋ ํจ์๋ค์ ์ ์ํ์ง๋ง ์ฌ์ค Haskell ์์ ๋ชจ๋ ํจ์๋ ํ๋์ ์ธ์๋ฅผ ๋ฐ๋๋ก ๋์ด์์ต๋๋ค. makeHtml :: String -> String -> String ์ด์ ์ ์์ฑํ makeHtml ์ ๋๊ฐ์ String ์ธ์๋ฅผ ๋ฐ์ ํ๋์ String ์ ๋ฐํํ๋๋ก ๋์ด์์๋๋ฐ, ์ฌ์ค ์ด๋ ๋ค.. 2022. 11. 28. [Haskell Tutorial] Function & Chaining ๐ก ํด๋น ํฌ์คํธ๋ Learn Haskell by building a blog generator ๋ฅผ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ๐ ํจ์ Haskell ์ ํจ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค. ... = ์ด๋ ํจ์ ์ด๋ฆ์ camelCase ๋ฅผ ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. content ๋ผ๋ ์ธ์๋ฅผ ๋ฐ์ ๋ฌธ์์ด์ ๋ง๋ค์ด์ ๋ฐํํ๋ ํจ์๋ฅผ ๊ตฌํํด๋ด ์๋ค. wrapHtml content = "" content "" ์ด์ ์ด ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์์ ์ถ๋ ฅํฉ๋๋ค. main = putStrLn (wrapHtml "Hello World!") ์ด๋ผ? ์ฌ๊ธฐ์๋ ๊ดํธ๊ฐ ์ฌ์ฉ๋์์ต๋๋ค. Haskell ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ดํธ ์์ด๋ ํจ์ ํธ์ถ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ค๋ง ์์ ๊ฐ์ด ๊ดํธ๋ฅผ ๋ฌถ์ด์ ํธ์ถํ๋ฉด ํด๋น ํํ์์ ๊ฒฐ๊ณผ๋ก ๋์น๋ฉ๋๋ค. putStrLn ํจ์๊ฐ ํ.. 2022. 11. 28. ์ด์ 1 2 3 4 5 ๋ค์