토, 2006-08-19 00:52 — 귤
Haskell은 무조건 왼쪽에서 오른쪽으로 처리한다. 그 예외가 +, - 같은 중위연산자(infix)이다. 이것도 일종의 문법
설탕(syntactic sugar)이랄 수 있다. 아무래도 + 1 2라고 쓰는 것보다야 1 + 2가 더 자연스러우니까 말이다. 대부분 언어에서
중위연산자는 언어 자체에 정의가 되어있지만, Haskell에서는 프로그래머가 정의할 수 있다. 다만 함수 이름에 다음 기호 중 하나는 포함되어
있어야 한다.
! # $ % & * + . / < = > ? @ \ ^ | - ~
수학에서 보통 +는 *보다 늦게 계산한다. 이를 우선 순위라고 한다. 그리고 똑같은 +가 두 개 이상 있으면 왼쪽부터 계산한다. 이것은
결합 순서라고 한다. Haskell에서 함수는 기본적으로는 우선 순위가 9이고 결합 순서는 왼쪽부터지만 중위연산자는 이를 지정해줄 수
있다.
infix 3 :+: -- 우선순위 3, 결합 순서 없음 infixl 5 :* -- 우선순위 5, 왼쪽부터 결합: infixr 7 :^: -- 우선순위 7, 오른쪽부터 결합
아래 표는 Haskell 표준함수 중에서 중위연산자들의 우선순위와 결합순서를 정리한 것이다.
중위연산자를 다른 함수처럼 취급해야할 때가 있다. foldl 함수처럼 함수를 매개변수로 받는 함수에 넘겨 줄 때 그렇다. 이때 중위연산자의
앞뒤에 괄호를 붙여주면 보통 다른 함수들과 똑같이 취급한다.
(+) 1 2 ⇒ 1 + 2
반대로 함수를 중위연산자로 취급하고 싶으면 앞뒤에 역따옴표(~표 키에 있는 `)를 앞뒤에 붙여준다. elem 함수는 어떤 값이 리스트 안에
있는 지 없는 지 확인해주는 함수인데 영어의 "A is an element of B"라는 표현에서 따왔기 때문에 중위연산자로
많이 쓴다.
2 `elem` [1,2,3] ⇒ elem 2 [1,2,3]
때로는 오른쪽에서 왼쪽으로 계산해나가야할 경우도 있다. 먼저 계산해야할 부분을 괄호쳐주면 그만이지만 중위연산자 .을 이용해 합성함수를
만드는 방법도 있다.
f . g x ⇒ f ( g x )
그 외에 자주 쓰이는 중위연산자들은 다음과 같다.
자주 쓰는 연산자
아래는 !!와 ++의 사용례이다.
[4,5,6] !! 0 ⇒ 4 [4,5,6] !! 1 ⇒ 5 [4,5,6] !! 2 ⇒ 6
[1,2] ++ [3,4] ⇒ [1,2,3,4]