본문 바로가기

함수형프로그래밍3

Swift에서의 렌즈(Lens) - Basic 복잡한 데이터구조에서 특정구조에 접근하는 방법을 Lens라는 함수객체로 알아보도록 하겠습니다.먼저 전체에서 부분을 가져오는 함수를 만들어 보겠습니다.Whole -> Part (getter)  전체에서 부분만 수정하는 것도 필요할 거예요 (setter)Part, Whole => Whole여기서 Part => Whole가 아닌 이유는Whole에서 Part를 제외한 다른 부분은 기존의 Whole에 있던 것 그대로 있어야 하기 때문입니다.   그럼 이제 이러한 특성을 가진 함수객체 Lens를 만들어보겠습니다.//함수객체를 생성할때 get함수와 set함수를 지정해 줄 수 있습니다.struct Lens { let view: (Whole) -> Part let set: (Part, Whole) -> Who.. 2025. 3. 13.
Custom Operator => 이번 시간에는 https://devamor.tistory.com/6에서 배운 연산자 만들기를 통해서 새로운 연산자를 만들도록 하겠습니다. 아래의 코드를 보면서 설명드릴게요! func increaseTwo(value: Int) -> Int { // 인수를 받아서 2을 더해서 반환하는 함수 return value + 2 } func decreaseOne(value: Int) -> Int { // 인수를 받아서 1을 빼서 반환하는 함수 return value - 1 } 사용할 때! decreaseOne(value: increaseTwo(value: 5)) // print 6 ((Int) -> Int) -> Int increaseTwo함수의 반환 값을 decreaseOne 함수에 넣어서 결괏값을 출력합니다. 매.. 2022. 12. 2.
Currying 함수 Currying을 알아보도록 하겠습니다. 예시도 어렵고 저도 이해하는데 꽤나 많이 걸려서 차근차근 정리해보도록 하겠습니다. "수학과 컴퓨터 과학에서 커링이란 다중 인수를 갖는 함수를 단일 인수를 갖는 함수들의 함수열로 바꾸는 것을 말한다." 간단히 말해서 함수에 인수들이 여러 개 일 때 한 개의 인수를 가지는 함수들로 바꾸는 것! 함수에 인수가 두 개이고 반환되는 값은 1개입니다. func add(x: Int, y: Int) -> Int { x + y } // (Int, Int) -> Int add(x:3, y: 2) // print 5 한 개의 인수를 가지는 함수들로 나열하는다는 것은 아래처럼 바뀌어야겠습니다. (Int) -> (Int) -> Int 함수의 시그니처 func add(x: Int) .. 2022. 11. 30.