neverlish's blog
aboutgithub

clojure의 더하기는 (+ 1 2 3) 이다

clojure 함수의 특이한 생김새를 알아보자.

일반적인 언어에서 더하기 함수는 아래와 같다.

1 + 2 + 3 + 4 + ...

이 경우 + 는 연산자이다. 함수와는 다른 존재인 것이다. 일반적인 언어에서 함수는 아래와 같이 사용한다. (javascript에서 1 더하기 2 더하기 3을 반환하는 함수를 예시로 만듦)

function sum(a, b, c) {
  return a + b + c;
}
sum(1, 2, 3);

clojure 더하기 함수의 설명

clojure의 경우, 더하기가 일반적인 언어와 다르다.

(+ 1 2 3)

위 함수의 생김새를 하나씩 뜯어보자.

1. clojure 에서는 함수 구현부와 실행부를 () 로 감싼다.

clojure는 lisp 이라는 언어의 방언이고, 이 특성은 lisp 에서 유래한다.

clojure 에서는 함수를 아래와 같이 선언한다. 아래 함수는 특정 값에 2를 더하는 함수이다.

(defn add2
  [val]
  (+ 2 val))

이 함수는 아래와 같이 사용한다.

(add2 3)

그러면 이 함수는 5를 반환한다.

이처럼 clojure에서는 함수를 구현하고 실행할 때, 모두 () 로 감싼다.

2. clojure 에서는 실행할 함수가 괄호의 처음에 들어간다.

() 안에서 함수를 실행하려면, () 안에 두 개 이상의 무언가를 입력해야 한다.

첫번째 자리에는 무조건, 실행할 함수를 입력해야 한다.

두번째 이후의 자리에는, 함수에 입력할 인자를 입력한다.

3. clojure 에서 + 는 함수이다.

clojure의 더하기 예시 코드를 다시 보자.

(+ 1 2 3)
  • 가 일반적인 언어처럼 1과 2 사이, 2와 3 사이에 위치하지 않고, 함수가 위치하는 자리에 + 가 자리하고 있다.

실제로 특정한 무언가가 함수인지 검사하는 fn? 를 이용해 + 를 검사해보면,

(fn? +)

true가 반환된다.

처음보면 기존 언어들과는 함수를 구현하고 실행하는 방법이나 사고방식이 달라서 헷갈릴 수 있다. 하지만 적응되고 나면 몇 가지 장점을 느낄 수 있다.