-
[Haskell] 5 - 3. $ (function application)๊ณต๋ถ/ํจ์ํ ํ๋ก๊ทธ๋๋ฐ 2020. 2. 16. 14:23
$
Function Application ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ํ์ค์ผ์์ ๊ฐ์ฅ ์ฐ์ ์์(precedence)๊ฐ ๋ฎ์ ํจ์๋ก, ์์ ์ ์ค๋ฅธ์ชฝ์ ํจ์๋ฅผ ๋จผ์ ์คํํ๊ฒ ํด์ค๋ค.
๋ณดํต์ฒ๋ผ, ์คํ์ด์ค ( ' ' )๋ก ๊ตฌ๋ถ๋ ํจ์๋ค๋ก ์ด๋ฃจ์ด์ง ํ๋ก๊ทธ๋จ์ด sqrt 3 + 4 + 9 ์ด๋ ๊ฒ ์์ผ๋ฉด, sqrt 3 ๋จผ์ , ๊ทธ ๋ค์ + 4, ๊ทธ ๋ค์ + 9 ์ด ์์ผ๋ก ์คํ๋๋ค. ์ด๋ฅผ left - association (์ผ์ชฝ ์ฐ๊ด)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ทธ๋ฐ๋ฐ, $๊ฐ ๋ถ์ผ๋ฉด ๋ฐ๋๋ก $์ ์ค๋ฅธ์ชฝ ๋ถํฐ ์คํ๋๋ค.
๋ง์ฝ ์์ ํ๋ก๊ทธ๋จ์ด sqrt (3+4+9) ๋ก ์คํ๋์ด์ผ ํ๋ค๋ฉด, $๋ฅผ ์ฌ์ฉํด ์๋์ฒ๋ผ ํํํ ์ ์๋ค.
sqrt $ 3 + 4 + 9
๊ดํธ๋ฅผ ๋์ฒดํด ๊ฐ๋ ์ฑ์ ๋์ฌ์ค๋ค.
$ ๊ฐ ๊ดํธ์ ์ ( ' (' )์ด๊ณ , ์๋์ผ๋ก ๋์ ๋ซ๊ธฐ ๊ดํธ ( ' ) ' )๋ฅผ ๋ถ์ฌ์ค๋ค๊ณ ์๊ฐํ๋ฉด ํธํ๋ค.
์๋ ํจ์๋ฅผ $๋ฅผ ์ฌ์ฉํด์ ()๋ค์ ์ ๊ฑฐํด๋ณด์.
sum (filter (> 10) (map (*2) [2..10]))
=> 80filter๊ฐ ๊ดํธ๋ก ์ธ์ฌ ์๋ค. filter๋ฅผ ๋จผ์ ์คํํ๊ฒ ๋ค๋ ์๋ฏธ๋๊น, filter ์์ $๋ฅผ ๋ถ์ด์.
sum $ filter (> 10) (map (*2) [2..10])
=> 80์, ์ ๋์ค๋ค. ๊ทธ๋ผ ๋ ์ด๋ ๋ฐ๊ฟ ๋ฐ๊ฐ ์์๊น?
์ง๊ธ ์ ์ดํด๋ณด๋, map๋ ๊ทธ๋ ๋ค. filter๋ณด๋ค map์ ๋จผ์ ์คํ ์ํค๊ณ ์ถ์ ๊ฑฐ๋๊น, map ์์๋ $๋ฅผ ๋ถ์ฌ๋ณด์!
sum $ filter (> 10) $ map (*2) [2..10]
=> 80๋ณต์กํ ๊ดํธ ์์ด, ๋๋ค์ ํจ์๋ค๋ง ๋จ์๋ค! $๋ฅผ ์ฌ์ฉํ๋ฉด ()์ ์ฌ์ฉ์ ์ค์ฌ ๊น๋ํ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค.
ํจ์์ ์ฐ์ ์์์ ๋ฐ๋ผ ๊ดํธ๋ฅผ ๋จผ์ ์จ๋ณด๊ณ , ๊ทธ ๋ค์์ $๋ก ๋ฐ๊ฟ๋๊ฐ๋ ์ฐ์ต์ ํ๋ ์กฐ๊ธ ๋ ์์ ์ต๋๋ค :)
์ฐธ๊ณ
๋ณด๊ณ ์๋ ์จ๋ผ์ธ ๊ต์ฌ
http://learnyouahaskell.com/higher-order-functions#function-application
๊ณต๋ถํ ๋ ์ฌ์ฉํ๋ Repl
https://repl.it/languages/haskell
ํ๊ธฐ
์์ ์ ์ ๋ ์๊ณ ๋ฏ์ ๊ฐ๋ ์ด๊ณ ํ๋ ์๊พธ ์ ๋ฆฌ๊ฐ ๋ฆ์ด์ง๋๋ค ใ ๊ทธ๋์ ๋๋ ์๊ฒ ์ชผ๊ฐ์ ์ดํดํ ๋ถ๋ถ๋ถํฐ ์ฌ๋ฆฌ๊ธฐ๋ก ํ์ด์. ์ดํดํ์ง ๋ชปํ๊ณ ๊ทธ๋ฅ ์ ๊ธฐ๋ง ํ๋ ์ฌ๋ฏธ๋ ์๊ณ ํท๊ฐ๋ฆฌ๊ธฐ๋ง ํ๋๋ผ๊ตฌ์! ๊ณต๋ถ์ฉ ๋ธ๋ก๊ทธ๋ฅผ ์ฐ๋ ๊ฒ๋ ์ ๊ฒ ๋ง๋ ์ ๋ต์ด ํ์ํ๋ค์. ๊ณต๋ถ์ฉ ๋ธ๋ก๊ทธ ์ฐ์๋ ๋ชจ๋ ๋ถ ํ์ดํ ์ ๋๋ค!
'๊ณต๋ถ > ํจ์ํ ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Haskell] #6 syntax-in-functions (1) (0) 2020.01.27 [Haskell] #5 Type (2) (0) 2020.01.20 [Haskell] #4 Type (1) (0) 2020.01.19 [Haskell] #3 Tuple (0) 2020.01.12 [Haskell] #2 List(2) Range, list comprehension (0) 2020.01.12