[Haskell] 컀링(Currying)

[원본 링크]

컀링은 ν•¨μˆ˜μ—μ„œ μž„μ˜ μΈμžλ“€μ„ 미리 전달해놓은 λΆ€λΆ„ ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 있게 ν•΄μ£ΌλŠ” κΈ°λŠ₯이닀.

λ§Œμ•½ Intλ₯Ό λ‘κ°œ λ°›κ³  Intλ₯Ό λ°˜ν™˜ν•˜λŠ”
{** (Int, Int) -> Int } ν•¨μˆ˜κ°€ μžˆλ‹€ 치자.
사싀 μ €λ ‡κ²Œ ν‘œν˜„ν•˜κΈ΄ ν•˜μ§€λ§Œ,
저건 {
Int -> (Int -> Int) } μ΄λ ‡κ²Œλ„ ν‘œν˜„λ  수 있고, { (Int -> Int -> Int **} μ΄λ ‡κ²Œλ„ ν‘œν˜„λ  수 μžˆλ‹€.
λ†€λžκ²Œλ„ ν•˜μŠ€μΌˆμ—μ„œ μ € νƒ€μž…λ“€μ€ μ„œλ‘œ κ°™λ‹€!

λ•Œλ¬Έμ— λ‘κ°œμ§œλ¦¬ ν•¨μˆ˜μ— 인자λ₯Ό ν•˜λ‚˜λ§Œ μ „λ‹¬ν•˜λ”λΌλ„, κ·Έ ν‘œν˜„μ‹μ—μ„œ λ‚˜λ¨Έμ§€ 인자λ₯Ό λ°›λŠ” ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•œλ‹€.
μ•„λž˜λŠ” κ·Έ κ°„λ‹¨ν•œ μ‚¬μš©λ‘€λ‹€. image

image add2λŠ” add의 lhs에 100을 박아놓은 컀링 ν•¨μˆ˜λ‹€. κ·Έλž˜μ„œ 받은 μΈμžμ™€ 100을 잘 λ”ν•΄μ„œ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜κ°€ 됐닀...

그리고 ꡳ이 μ €λ ‡κ²Œ λΆ€λΆ„ν•¨μˆ˜λ₯Ό μͺΌκ°œμ§€ μ•Šμ•„λ„, 컀링은 κΈ°λ³Έλ™μž‘μ΄λ‹€.
λ¬΄μŠ¨μ†Œλ¦¬λƒλ©΄ image

image 이런 κ°„λ‹¨ν•œ μ½”λ“œμ—μ„œλ„ 사싀 컀링이 μˆ˜ν–‰λ˜κ³  있던 것이닀. 뭘까?
add 100 200은 사싀 ν•¨μˆ˜μ˜ μ—„μ²­λ‚œ μš°μ„ μˆœμœ„ λ•Œλ¬Έμ— (add 100) 200둜 ν‰κ°€λœλ‹€.
첫번째 인자λ₯Ό 받은 μ»€λ§ν•¨μˆ˜λ₯Ό λ§Œλ“€κ³ , κ·Έ μ»€λ§ν•¨μˆ˜κ°€ λ‹€μ‹œ λ‘λ²ˆμ§Έ 인자λ₯Ό 받은 것이닀.

ν•˜μŠ€μΌˆμ˜ ν•¨μˆ˜λŠ” 이런 μ‹μœΌλ‘œ κ΅΄λŸ¬κ°„λ‹€.


μ°Έμ‘°
http://1ambda.github.io/haskell/intro-to-haskell-1/