- 20세기 수학자인 Haskell Curry 등의 작업으로 수학에서 유래한 언어 기술
- 여러개의 파라미터를 받는 함수를 하나의 파라미터를 받는 여러 개의 함수로 쪼개는 것
func multiply(_ a: Int) -> (Int) -> Int {
return { b in
return a * b
}
}
let area = multiply(10)(20) //200
커링을 하는 이유
- 함수의 합성을 원활하게 하기 위해서 입니다.
- 함수의 Output이 다른 함수의 Input으로 연결되면서 합성될 때
- 함수들이 서로 chain을 이루면서 연속적으로 연결이 되려면, Output과 Input의 타입과 갯수가 같아야 합니다.
- 함수의 Output은 하나밖에 없으니 Input 또한 모두 하나 씩만 갖도록 한다면 합성하기가 쉬워질 것입니다.
실습
n의 배수만을 모아 합을 구하는 함수 filterSum를 currying 하시오.
func filterSum(_ ns: [Int], _ n: Int) -> Int {
return ns.filter({ $0 % n == 0 }).reduce(0, +)
}
func filterSum2(_ n: Int) -> ([Int]) -> Int {
//함수를 구현하세요
return { b in
return b.filter({$0 % n == 0}).reduce(0, +)
}
}
func solution(_ nums: [Int], _ r: Int) -> Int {
let filteredR: ([Int]) -> Int = filterSum2(r)
return filteredR(nums)
}
댓글