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)을 계산하는 함수를 만들어 봅시다.
It appears that you have an ad-blocker running. By whitelisting SlideShare on your ad-blocker, you are supporting our community of content creators.
Hate ads?
We've updated our privacy policy.
We’ve updated our privacy policy so that we are compliant with changing global privacy regulations and to provide you with insight into the limited ways in which we use your data.
You can read the details below. By accepting, you agree to the updated privacy policy.