본문 바로가기
반응형

함수형프로그래밍4

C# 함수형 프로그래밍 스타일로 반복문 작성하기 함수형 프로그래밍에서의 반복문 작성함수형 프로그래밍 스타일로 코드를 작성하다보면 반복문이 필요한 경우를 만나게 될 것이다.그런데 이때 갑자기 함수형 스타일이 아닌 기존 스타일로 for문을 사용하는건 뭔가 이상하다고 느껴져서 찾아보게 되었다.보통 함수형 프로그래밍 스타일에서는 반복문으로 아래 2가지의 함수를 사용한다. Enumerable.Range()Enumerable.Repeat()  C# Linq - Enumerable.Range()Enumerable.Range(Int32, Int32) 메서드public static System.Collections.Generic.IEnumerable Range (int start, int count);매개변수start int32시퀀스의 첫번째 정수값 (시작값)coun.. 2024. 8. 21.
스칼라(Scala) 핵심 고차 함수 - map, flatten, flatmap map 메서드map 함수는 객체 컬렉션과 해당 객체에 정의된 함수 f를 사용하고, 컬렉션의 n번째 객체가 f에 의해 변환된 객체인 새로운 컬렉션을 반환한다. def square(n: Int): Int = n * nList(1, 2, 3, 4, 5).map(square) 그러면 컬렉션이 반환된다.List(1, 4, 9, 16, 25) 다음은 숫자 리스트를 가져와 각각의 제곱한 다음 제곱한 수를 모두 더하는 함수다. 표현식이 얼마나 간결한지 확인해 보자.def squreAndSum(lst: List[Int]): Int = list.map(square).sum 간단한 타입이 아닌 리스트가 있다면 어떻게 해야 할까? 예를 들어 Option을 확인하면 다음과 같다.def getUser(userName: Strin.. 2024. 7. 24.
C# 꼬리 재귀(tail recursion) 꼬리 재귀(tail recursion)란 무엇인가? 지금까지 재귀에 대해서 설명하면 GetFactorial() 메서드를 사용해서 계승을 계산하는 전통적인 재귀 형태를 사용했다. 이 방식은 재귀 호출을 먼저 수행하고 값을 반환하며, 이후에 결과를 계산한다. 이 재귀 모델을 이용하는 경우, 재귀 호출이 끝날 때까지 결과를 얻을 수 없다. 이 같은 전통적인 재귀 모델과 더불어 꼬리 재귀(tail recursion)라는 또 다른 형태가 있다. 꼬리 재귀에서는 꼬리 즉, 마지막 재귀 호출이 함수가 수행하는 마지막 작업이다. using System; public partial class Program { static void Main(string[] args) { TailCall(5); } public static.. 2024. 4. 1.
부수 효과(Side Effect)와 참조 투명성(Referential Transparency)에 대해서 부수효과(Side Effect) 함수형 프로그래밍(Functional Programming)의 정의를 설명할 때, 중요하게 언급되는 2가지 개념은 바로 '부수 효과'와 '참조 투명성'이다. 먼저 '부수 효과'는 함수 내의 실행으로 인해 함수 외부가 영향을 받는 것을 의미한다. 함수의 매개 변수의 값이 변경되어, 이로 인해 함수를 사용하는 코드에 영향을 주거나, 함수의 외부 세계인 데이터베이스, 파일 시스템, 네트워크 등으로 데이터 이동이 발생하는 것을 말한다. 함수형 프로그래밍에서 함수는 부수효과를 발생하지 않는다. public static int add(int a, int b) { while (b > 0) { a++; b--; } return a; } 위의 메서드는 함수적이다. 정수형 a, b를 매개 .. 2024. 2. 13.