2. 표현식 - 수식
ghci를 켜서(cmd창 or 터미널에서 ghci라고 타이핑) 아래 코드들을 치고 결과를 확인해봅시다.
Prelude> 2 + 15
17
Prelude> 49 * 100
4900
Prelude> 1892 - 1472
420
Prelude> 5 / 2
2.5
일반적인 연산들은 우리가 생각하는 그대로 동작합니다.
3. 표현식 - 수식
다른 언어들과 마찬가지로 괄호로 연산의 우선 순위를 정할 수 있습니다.
Prelude> (50 * 100) - 4999
1
Prelude> 50 * 100 - 4999
1
Prelude> 50 * (100 - 4999)
-244950
Prelude> 5 * (-3)
-15
주의 : Haskell에서 음수를 다룰 때는 반드시 괄호로 감싸는 것이 좋습니다. 컴파일러가 뺄셈 연산과
부호 연산을 헷갈려합니다.
4. 표현식 - 비교
비교 구문도 타 언어와 거의 같습니다. 단, 서로 다름을 나타내는 연산자는 /= 입니다.
Prelude> True && False
False
Prelude> 3 /= 2
True
Prelude> not False
True
Prelude> 1 == 2 || 3 == 3
True
5. 표현식 - 함수
지금까지 다룬 연산들 ( +,-,*,/, == 등등) 역시 함수입니다. 이 함수들은 중위 함수기 때문에 인자들
중간에 함수를 넣었지만 대부분의 함수들은 전위 함수죠. 일반적인 함수들에 대해 알아봅시다.
Haskell에서 함수 호출은 타 언어와 조금 다릅니다. Haskell에서 함수 호출은 단순히 함수의 이름과
인자 사이에 공백을 넣는 것을 통해 이루어집니다.
C++ : f(2,3,4)
Haskell : f 2 3 4
C++ : someFunc(a,b,3,f(2,3))
Haskell: someFunc a b 3 (f 2 3)
6. 표현식 - 함수
함수 호출도 GHCi를 통해 테스트해 봅시다.
Prelude> (+) 3 5
8
Prelude> succ 8
9
Prelude> min 10.1 9.5
9.5
Prelude> succ 9 + max 5 4 + 1
16
Haskell에서 함수 어플리케이션(함수 이름과 인자를 통해 함수를 호출한 것)은 가장 높은 우선순위를
갖습니다. succ 9 + max 5 4 + 1은 (succ 9) + (max 5 4) + 1과 동일합니다.
7. 표현식 - 함수
Haskell에서 인자를 2개 받는 함수의 경우 backtick(`)을 이용하여 중위 함수로 표현할 수 있습니다.
Prelude> 5 `div` 3
1
Prelude> 5 `mod` 3
2
Prelude> 5 `max` 4
5
Prelude> 5 `min` 4
4
div나 mod같은 함수는 중위 함수로 썼을 때 가독성이 좋습니다. max나 min같은 경우는 좀
애매하네요.
8. 함수 만들기
이제 간단한 함수를 한 번 만들어봅시다. 아무 텍스트 에디터에서나 아래 코드를 작성한 후 first.hs(
혹은 원하는 이름)로 저장하고 GHCi에서 실행시켜봅시다.
first.hs
double x = x + x
파일을 저장한 후 저장한 폴더에서 GHCi를 실행하고 :l (fileName)구문을 통해 작성한 코드를
불러오면 됩니다.
Prelude> :l first.hs
[1 of 1] Compiling Main
Ok, modules loaded : Main
Prelude> double 3
6
9. 함수 만들기
Haskell에서 함수의 선언 순서는 상관이 없습니다.
first.hs
double2 x y = double x + double y
double x = x + x
ghci에서 다시 실행해 봅시다.
Prelude> :l first.hs
[1 of 1] Compiling Main
Ok, modules loaded : Main
Prelude> double2 3 5
34
10. if - then - else
타 명령형 언어에서 조건문으로 쓰이는 if 구문이 Haskell에서는 표현식입니다. C++의 삼항 조건
연산자와 유사하다고 생각하시면 됩니다. 표현식이기 때문에 else 부분이 빠질 수 없으며 식 자체로
하나의 결과 값이 됩니다.
Haskell : if (조건) then (조건이 참일 때 값) else (조건이 거짓일 때 값)
C++ : (조건) ? (조건이 참일 때 값) : (조건이 거짓일 때 값)
이 걸 이용해서 함수를 만들어 봅시다.
first.hs
-- 100보다 작으면 2배, 아니면 원래 수를 그대로 돌려주는 함수
doubleIf x = if x < 100 then x * 2 else x
11. 연습 문제
• even
숫자 하나를 받아서 그 숫자가 짝수면 True, 홀수면 False를 돌려주는 함수를 만들어 봅시다.
(* haskell에 이미 even이라는 이름의 같은 함수가 존재합니다. 함수의 이름은 even 말고 다른 걸로
쓰셔야 합니다. )
• factorial
숫자 n을 받아서 n!(1*2*...*n)을 계산하는 함수를 만들어 봅시다.