본문 바로가기

프로그래밍/함수형 프로그래밍9

도커(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.
재귀 vs 꼬리 재귀 재귀(Recursion)함수 내에서 자기 스스로를 호출하는 함수를 재귀 함수라고 한다.그리고 함수형 프로그래밍에서 불변성(Immutable)을 유지하기 위해서 재귀를 사용한다. 불변성(Immutable)은 함수형 코드의 핵심적인 속성이다. 프로그램의 변경 가능한 상태가 적을수록 프로그래머가 프로그램을 작성하는 동안 고민할 대상이 줄어들게 된다. 다수의 프로그래밍 오류는 프로그래머가 변경하는 세부사항을 대량으로 동시에 유지할 수 없기 때문에 발생한다. 상태를 변경하면 반드시 이를 추적하고 관리해야 하는 복잡함이 발생한다. 재귀를 사용하면 프로그래머가 신경 써야 하는 변수가 줄어든다. 그리고 재귀가 호출되면서 변경되는 값들이 복사를 통해서 전달된다. 불변성을 유지하는 방법은 매번 값을 복사하는 것이다. 재귀.. 2024. 3. 15.
C#으로 함수형 프로그래밍을 해보자 C#으로 함수형 프로그래밍을 해보자 분명히 하고 가야 할 부분이 있다. C#에서 함수형 프로그래밍에서 영감(functional-programming-inspired)을 받아서 만들어진 기능(feature)들은 순수 함수형 언어의 기능과 완전히 동일하지 않다. (예를 들면 하스켈, Haskell) 하지만 함수형 프로그래밍의 개념을 이해하고 이를 채용하는 것만으로도 앞으로 우리가 적성하는 코드의 질을 대폭 향상할 수 있을 것이다. C#에서 왜 함수형 프로그래밍을? .NET 프레임워크는 몇몇 함수형 기능들을 LINQ 확장자 메서드로 지원한다. 함수형 개념이 들어가 있는 걸 인지하지 못하고 사용했을 것이다. 이제 우리는 C#의 함수형 기능들을 통해서 함수형 프로그래밍이 가지고 있는 장점을 코드에 적용해 볼 것이.. 2024. 3. 14.