본문 바로가기

함수형7

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.
도커(Docker)로 리스프(LISP) 실행하기 도커 컨테이너 접속 윈도우 시작 탭에서 PowerShell을 관리자 권한으로 실행하자. 먼저, 도커 이미지를 다운로드한다. $ docker pull everypreciousday/functionalbigdata:latest 다운로드한 이미지를 바탕으로 컨테이너를 실행한다. $ docker run -it --name fpstudy everypreciousday/functionalbigdata:latest /bin/bash 리스프 실행 방법 - REPL 설치한 도커 이미지에는 CLISP 및 REPL 환경이 설치되어 있다. REPL은 'Read Eval Print Loop'의 약자다. REPL을 사용하면 코드를 한 줄씩 입력하고 그 결과를 즉각적으로 확인할 수 있다. 즉, 마치 컴퓨터와 대화하듯이 한 문장씩 .. 2024. 3. 26.
C#의 커링(Curring) 커링(Curring)이란? 커링이란 순서에 따라 인수의 구조를 변경하는 간단한 구조화 기법이다. 커링은 n개의 인수를 가지는 함수를 단일 인수를 가지는 n개의 함수로 변환하는 것으로, 단일 인수만 가질 수 있는 람다 함수의 한계를 극복하기 위해서 탄생했다. 비 커링(Non-Curring) 예제 NonCurried Method 파일에 포함된 다음 코드를 살펴보자. public partial class Program { public static int NonCurriedAdd(int a, int b) => a + b; } 이 함수는 인수로 전달받은 a와 b의 합을 반환한다. 이와 같은 함수는 굉장히 자주 사용하는 유형인데, 이 함수를 사용하는 예는 다음과 같다. public partial class Prog.. 2024. 3. 25.
일급 함수(First-class function) vs 고차 함수(Higher-order function) 일급 함수(First-class Function) 프로그래밍 언어에서 함수(Function)를 일급 시민(First-class Citizen)으로 취급하는 것을 말한다. 즉, 함수를 변수에 할당하거나 파라미터로 전달하고 반환값으로 함수를 반환하는 등을 할 수 있는 언어를 말한다. 이러한 언어로 C#, C++, python, javascript 등이 있다. 고차 함수(Higher-order Function) 고차 함수는 하나 이상의 함수를 인자로 받거나 함수를 결과로 반환하는 함수를 말한다. 즉, 다른 함수에서 작용하는 함수이다. 고차 함수(Higher-order Function) 예제 map() function => select() function using System; using System.Coll.. 2024. 3. 25.
함수형 프로그래밍 관련 개념 정리 함수형 프로그래밍에 대해서 함수형 프로그래밍은 다음과 같은 테크닉들을 사용하는 것이라고 여겨지고 있다. 일급 함수(First-class function) 익명 함수(Lambda function) 클로져(Closure) 커링(Curring) 대수적 데이터 타입(Algebraic datatype) 다른 자료형의 값을 가지는 자료형 대수적 데이터 타입에는 곱타입(product type)과 합타입(sum type)이 존재함 부분으로 전체를 나타내는 타입 불변성(Immutable) 재귀 함수(Recursive function) 참조 투명성(Referential transparency) 순수 함수(Pure function) 고차 함수(Higher-order function) 지연 평가(Lazy evaluation).. 2024. 3. 22.
C#으로 함수형 프로그래밍을 해보자 C#으로 함수형 프로그래밍을 해보자 분명히 하고 가야 할 부분이 있다. C#에서 함수형 프로그래밍에서 영감(functional-programming-inspired)을 받아서 만들어진 기능(feature)들은 순수 함수형 언어의 기능과 완전히 동일하지 않다. (예를 들면 하스켈, Haskell) 하지만 함수형 프로그래밍의 개념을 이해하고 이를 채용하는 것만으로도 앞으로 우리가 적성하는 코드의 질을 대폭 향상할 수 있을 것이다. C#에서 왜 함수형 프로그래밍을? .NET 프레임워크는 몇몇 함수형 기능들을 LINQ 확장자 메서드로 지원한다. 함수형 개념이 들어가 있는 걸 인지하지 못하고 사용했을 것이다. 이제 우리는 C#의 함수형 기능들을 통해서 함수형 프로그래밍이 가지고 있는 장점을 코드에 적용해 볼 것이.. 2024. 3. 14.