Category Archives: Haskell

시그마와 Fold

알고리즘을 구현할 때, 루프(loop)는 꼭 필요하다. 루프를 사용한다는 것은 우리가 어떤 시퀀스, 즉 어떤 자료의 목록인 리스트를 다룬다는 것을 뜻한다. 수학에서 리스트를 다루는 가장 대표적인 루프는 시그마이다. 시그마는 리스트를 받아 리스트의 각 원소를 합하는 루프다. 우리에게 익숙한 명령형 언어로 시그마를 작성해 보면 아래와 같다.

위의 sigma1을 보면 루프 내에서 sum의 상태와 i 변수의 상태가… Read More »

멋쟁이 헤스켈, List Comprehension!

헤스켈을 공부하기 시작한 것이 얼마 되지 않았지만, 보면 볼 수록 매력덩어리이다. 헤스켈에 푹 빠져버린 첫 순간은 List Comprehension을 접하고 나서다.

대수적 데이터 타입과 Enum

대수적 데이터 타입은 다른 데이터 타입을 조합 및 연산하여 하나의 새로운 집합을 정의할 때, 해당 집합을 대수적 데이터 타입이라고 한다. 쉽게 얘기해 집합을 정의하는 것이다. 헤스켈에서 대표적인 대수적 데이터 타입은 Bool 타입이다.

Bool 타입은 True타입과 False타입이 모여 Bool이라는 집합을 정의한다고 생각할 수 있다. 대수적 데이터 타입의 몇 가지 예를 더 살펴보자.

Point 집합은… Read More »

함수를 정의하자.

수학적 함수표기와 Haskell 함수표기의 차이점 Mathematics Haskell f(x) f x f(x,y) f x y f(g(x)) f (g x) f(x,g(y)) f x (g y) f(x)g(y) f x * g y 조건 표현식으로 함수 정의하기

조건 표현식 중첩하기

주의 Haskell에서 if 조건 표현식은 항상 else 문이 있어야 한다. Guard를 사용하여 함수 정의하기

아주… Read More »

타입을 읽자.

Haskell 에서 타입을 지정할 때 :: 를 사용한다.

Class Constraints. Java, C# 등에서 Interface라고 생각하면 이해하기 쉽다.

커링(currying) 함수가 왜 필요한가?

명령형 언어에서 함수는 보통 0개에서 n개의 인자를 동시에 받아 특정 알고리즘을 수행한다.

함수형 언어에서 함수는 보통 커링함수를 사용하는데 커링 함수는 n개의 인자를 받는 함수가 있을 경우 n개의 인자를 동시에 받는 것이 아니라 1개씩 인자를 받으며 다음 인자를 받는 함수를 반환하는 함수를 말한다. int add( int a, int b ) 라는 함수가 있을 경우, 이를… Read More »