하스켈 프로그램은 정의와 표현식으로 이루어져 있어요.
상수 값은 name = expression으로 정의해요.
five = 5
six = 3 + 3
함수는 name parameters... = expression으로 정의하는데, 매개변수는 공백으로만 구분해요.
add number1 number2 = number1 + number2
함수를 호출하는 것도 표현식이고, 함수 이름을 쓰고 각 매개변수에 넘길 인자를 공백으로 구분해서 전달하면 돼요. 함수를 정의할 때와 똑같아요.
five = add 2 3
괄호를 사용하면 표현식의 평가 순서를 지정할 수 있어요.
six = add 2 (1 * 4)
twelve = add 2 1 * 4
하스켈은 공백과 들여쓰기로 코드의 경계를 나타내요. 어떤 표현식의 일부인 코드는 그 표현식의 시작보다 더 안쪽으로 들여써야 해요.
-- A function split over multiple lines, so subsequent lines must be indented
add number1 number2 =
number1 + number2
https://en.wikibooks.org/wiki/Haskell/Indentation
모듈은 함수를 내보내요. 즉, 모듈이 export 문에서 공개하는 함수를 사용할 수 있다는 뜻이에요. 모듈은 내부에서만 쓸 함수를 정의할 수도 있어요. 기본적으로 명시적으로 내보내지 않은 함수는 모듈 밖에서 사용할 수 없어요.
모듈의 맨 앞에서는 모듈 이름을 지정해요. Calculator.hs라는 파일이 있다면 모듈 이름을 Calculator로 지어야 해요. 그다음에 내보낼 함수를 지정하고, 그 뒤에 함수를 작성하기 시작하면 돼요. 그래서 이렇게 시작해 볼게요.
module Calculator ( add ) where
https://learnyouahaskell.github.io/modules#making-our-own-modules
주석은 하스켈 파일 안에서 코드로 해석되지 않는 텍스트예요.
주로 자신과 다른 프로그래머가 읽도록 남기는 글이에요.
두 개의 대시를 바탕으로 한, 한 줄 주석을 위한 간단한 문법이 있어요.
여러 줄 주석도 {-와 -}라는 여는 구분 기호와 닫는 구분 기호의 쌍으로 쓸 수 있어요.
-- a single line comment
-- another single line comment
{- a multiline comment
spanning multiple lines
-}
이 연습 문제 소개는 Learn You a Haskell for Great Good!에서 많은 내용을 가져왔고, Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License를 따라요.
이 연습 문제에서는 좋아하는 요리책을 보고 근사한 라자냐를 만들 수 있도록 코드를 작성해요.
라자냐를 만드는 데 걸리는 시간과 관련된 세 가지 과제가 있어요.
라자냐를 오븐에 몇 분 동안 넣어둬야 하는지 확인할 수 있도록 expectedMinutesInOven 상수를 정의해요. 요리책에 따르면 오븐에 넣어둘 예상 시간은 40분이에요:
expectedMinutesInOven
--> 40
라자냐에 추가한 층 수를 매개변수로 받아서, 라자냐를 준비하는 데 몇 분이 걸렸는지 반환하는 preparationTimeInMinutes 함수를 정의해요. 각 층을 준비하는 데 2분이 걸린다고 가정해요.
preparationTimeInMinutes 3
--> 6
elapsedTimeInMinutes 함수는 두 개의 매개변수를 받아요. 첫 번째 매개변수는 라자냐에 추가한 층 수이고, 두 번째 매개변수는 라자냐가 오븐에 있던 시간(분)이에요. 이 함수는 라자냐 요리에 얼마나 많은 시간을 들였는지 반환해야 하는데, 이는 준비 시간(분)과 그 시점까지 라자냐가 오븐에 있던 시간(분)을 더한 값이에요.
elapsedTimeInMinutes 3 20
--> 26
Exercism에 가입하고 Haskell 트랙을 연습 문제 107개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.