본문 바로가기

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

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.
함수를 변수로 사용하기, 함수를 반환값으로 사용하기 1급 객체(First-class citizen) 함수 다루기함수형 프로그래밍에서 함수는 1급 객체이기 때문에 변수에도 담을 수 있고, 반환값으로도 사용할 수 있다. using System;public partial class Program{ static void Main(string[] args) { // 변수 Func temp1 = x => x; Func> temp2 = x => y => x + y; Func>> temp3 = x => y => z => x + y + z; // 함수, 메서드 Func temp4(int y) => x => x + y; // 식 본문 멤버 Func temp5(int y) .. 2024. 7. 23.
스칼라(Scala) 리스트에 대해서 알아보자 스칼라(Scala) 리스트스칼라에서는 다음과 같이 List라는 키워드를 사용하여 리스트를 정의할 수 있다. > val a = List(1, 2, 3)a: List[Int] = List(1, 2, 3) 출력을 해보면 List[Int] 라고 출력되어 Int로 구성된 리스트가 만들어진 것을 알 수 있다. 또한, 다음과 같이 여러 종류의 타입으로 구성된 리스트를 만드는 것도 가능하다. > val b = List(1, "2", 3.0)b: List[Any] = List(1, 2, 3.0) 참고로,  Any는 모든 스칼라 타입의 부모이기 때문에 Any 타입의 변수에는 모든 타입의 값을 담는 것이 가능하다. > val a:Any = 1> val a:Any = "1"> val a:Any = 2.0> val a:Any .. 2024. 7. 23.
스칼라(Scala) 기본 문법에 대해서 알아보자 스칼라(Scala)스칼라(Scala)는 2004년 마틴 오더스키(Martin Odersky)에 의해 만들어진 JVM 위에서 돌아가는 또 다른 함수형 언어이다.클로저와 마찬가지로 모든 자바 라이브러리를 사용할 수 있으며, 객체지향과 함수형 패러다임이 절묘하게 결합되어서 주목받고 있다. 함수형 언어의 측면에서 봤을 때는 하스켈과 비슷한 느낌이 나며, 객체 지향의 측면에서는 자바의 냄새가 물씬 풍긴다. 따라서 자바에 익숙한 개발자들이 함수형 언어에 입문하기에 최적이자, 여러분이 실무에서 접할 가능성이 가장 높은 언어이기도 하다. 변수 val와 varval는 변경 불가(Immutable)한 변수를 만들 때 사용var은 변경 가능(Mutable)한 변수를 만들 때 사용val x = 1x = 2error: reas.. 2024. 7. 22.
리스프(LISP) 재귀 함수 구현해보자 리스트(LISP)로 재귀 함수이제 만들어볼 함수는 리스트의 합을 구하는 재귀 함수이다. 리스트는 재귀 함수와 궁합이 잘 맞는다. 재귀 함수가 작동하는 흐름함수의 이름은 sum-of-list로 하고, 길이가 n인 리스트를 입력으로 받아 그 총합을 반환하는 함수를 작성한다.구체적인 입력 인자로 [1, 2, 3]과 같이 세 개의 값으로 구성된 리스트를 생각해 보자.sum-of-list([1,2,3]) = 1 + sum-of-list[2, 3]이다.위의 식을 일반화하면 다음과 같이 된다. sum-of-list = list의 첫 번째 요소 + sum-of-list(첫 번째 요소를 제외한 리스트)종료 조건은 입력 인자가 빈 리스트일 때 0을 반환하면 된다.해당 내용을 코드로 작성해 보자.(defun sum-of-l.. 2024. 7. 16.