밤에 쓴 코드

FP) Higher Order Function - 고차함수 본문

FP

FP) Higher Order Function - 고차함수

붱이🦉 2019. 5. 13. 17:06

Higher Order Function 


 

1급객체로써의 함수

Swift 와 같은 함수형 프로그래밍 언어에서는 함수는 1급 객체 입니다 .

1급 객체는 이러한 특징을 가집니다.

  • 함수의 인수의 역할을 할 수 있습니다.
  • 함수의 반환형타입으로 지정할 수 있습니다.

이 두가지 를 보여줄 수 있는 예

함수의 합성을 보여드리겠습니다.

func composition<A,B,C>(_ f1:(A) -> B , _ f2:(B) -> C ) -> (A) -> C {
  return { 
    input in
    return f2(f1(input))
  }
}

제네릭과 1급객체 함수로서의 특징을 적용한 예입니다.

함수의 꼬리 물기를 통해서 두개의 함수를 하나의 합수로 합성했습니다.

f1이라는 함수는 A타입을 입력 받아서 B타입을 반환합니다.

f2이라는 함수는 B타입을 입력 받아서 C타입을 반환합니다.

f1outputf2input과 일치합니다.

f2(f1(input)) 이렇게 함수의 꼬리물기가 가능해집니다.

이를 통해서 합수를 합성하는 것 또한 가능해집니다.


고차함수

let array = [0,1,2,3,4,5,6,7,8,9]

filter: 순차 작업과 동시에 , 요소를 걸러 낸다. 인수로는 (T)->Bool 형태의 클로저를 인수로 받는다.

array.filter{ $0 % 2 == 0 } // [0,2,4,6,8]

map: 순차 작업과 동시에 , 요소에 특정 연산을 수행한 후 결과값으로 이루어진 콜렉션을 반환합니다.

array.map{ $0*2 } // [0,2,4,6,8,10,12,14,16,18]

reduce: 순차 작업과 동시에 연산을 수행한 결과와 다음 요소와 연산을 수행하고 그 결과값을 또 다음요소와 연산하여 최종적으로 하나의 값을 반환합니다.

array.reduce(0,{$0+$1}) //45
Comments