갈루아의 반서재


1. 함수 호출하기 - 중위함수(infix function)와 전위함수(prefix function)

1) 대부분은 전위함수이며, 형식은 다음과 같음

매개변수는 공백으로 구분됨

[함수의 이름] [공백] [매개변수1] [공백] [매개변수 2] ....


1
2
Prelude> min 3.4 3.2
3.2
cs


2) 함수는 모든 연산자 중 가장 높은 우선순위를 가짐

라인 5 에서 보듯이 succ 9 이 먼저 실행되고 결과값 10과 10을 곱해서 100이 나오게 됨

1
2
3
4
5
6
7
8
9
Prelude> succ 9 + max 5 4 + 1
16
Prelude> (succ 9+ (max 5 4+ 1
16
Prelude> succ 9 * 10
100
Prelude> succ (9*10)
91
 
cs


3) 2개의 매개변수를 받는 경우에는 역따옴표 (`) 로 함수 이름을 감싸고 중위함수처럼 사용가능하다

작은 따옴표( ' ) 가 아니라 역따옴표( ` ) 임에 주의

작은 따옴표를 쓰면 아래와 같이 syntax error 가 발생한다.

1
2
3
4
5
6
7
8
9
10
11
Prelude> div 92 10
9
Prelude> 92 `div` 10
9
Prelude> 92 'div' 10
 
<interactive>:32:4:
    Syntax error on 'div'
    Perhaps you intended to use TemplateHaskell
    In the Template Haskell quotation 'div'
 
cs


2. 함수 정의하기

1) 함수 호출구문과 비슷하다

  doubleMe                   x                                   = x + x

[함수의 이름] [공백] [매개변수1] [공백] [매개변수 2] .... = [해당 함수의 내용]


2) 함수 정의의 순서 없음

3) 정의된 함수를 결합하여 새로운 함수를 정의할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
Prelude> let doubleMe x = x + x
Prelude> doubleMe 4
8
Prelude> let doubleUs x y = doubleMe x + doubleMe y
Prelude> doubleUs 4 7
22
Prelude>
 
 
 
 
cs

4) 함수는 대문자로 시작할 수 없다.

3. 하스켈의 if 문은 else 가 필수다.

1
2
3
4
5
6
Prelude> let doubleSmallNumber' x = ( if x > 100 then x else x *2 ) + 1
Prelude> doubleSmallNumber' 78
157
Prelude> doubleSmallNumber' 119
120
Prelude>
cs

1) 하스켈 프로그램은 함수들의 집합으로, 함수는 데이터값을 결과값으로 반환시키는데 사용되며, 모든 함수는 다른 함수에 의해 사용될 수 있는 어떤 값을 반환해야 한다. 모든 함수는 어떤 값을 반환해야 하기 때문에, 모든 if 문은 적절한 else 문이 있어야 한다. 하스켈의 if 문은 값을 반환해야 하는 표현식이지 구문이 아니다.

2) 위에서 함수이름 뒤에 붙은 어퍼스트로피에 특별한 의미는 없다. 어퍼스트로피도 함수이름으로 사용할 수 있다는 것을 보여주는 내용일 뿐이다.