하스켈은 아래와 같이 두 가지 방식으로 작성할 수 있다.
함수 filter
를 두 가지 방식으로 작성하면 아래와 같다.
filter :: (a -> Bool) -> [a] -> [a]
-- Declaration style
filter p [] = []
filter p (x:xs) | p x = x : rest
| otherwise = rest
where
rest = filter p xs
-- Expression style
filter = \p -> \xs ->
case xs of
[] -> []
(x:xs) -> let
rest = filter p xs
in if (p x)
then x : rest
else rest
선언 방식은 등식을 최대한 여러 개 작성한다. 예를 들어 filter ... =
이 선언 방식에서는 두 번 쓰였고 표현 방식에서는 한 번 쓰였다.
선언 방식에서 주로 사용하는 문법은 아래와 같다.
where
절선언 방식을 주로 사용하는 언어는 아래와 같다.
표현 방식은 작은 표현 여러 개를 합쳐서 하나의 큰 표현을 만든다.
표현 방식에서 주로 사용하는 문법은 아래와 같다.
let
표현식case
표현식if
표현식표현 방식을 주로 사용하는 언어는 아래와 같다.