in Clojure

Clojure – ` syntax quote에 대해서

`syntax quote에 대해서 알아보자.

`와 연관있는 ~ unquote, 그리고 ~@unquote splicing이 있다.

위 두가지는 syntax quote를 이용하였을 때 그 반대의 영향을 주기 위해서 사용된다.

심볼을 심볼 그 자체로 활용하기 위해 사용된다. 'quote와 비슷하면서도 다르다. sytax quote 설명은 다른 장에서 알아보자.


user> (def five 5)
user/five
user>`five
user/five

p>한가지 기억하자. Clojure에서 모든 것들이 데이터이다. 위와 같이 quote를 사용하였을 때 평가되지 않고 심볼 자체 또는 리스트 자체로 출력이 되는 것을 볼수 있다.

그럼 왜 quote가 필요할까? 한가지 더 실험을 해보자.

(1 2 3)
Unhandled java.lang.ClassCastException
java.lang.Long cannot be cast to clojure.lang.IFn

` 위와 같이 에러가 발생된다. 이유는 현재 1이라는 심볼이 정의 되어 있지 않기 때문에 발생된다. (, )에 둘러 쌓여있을 때 첫번 째 argument는 심볼로 인식된다.

다시 quote를 활용해보자.


user>`(1 2 3)
(1 2 3)

에러 없이 정상으로 작동된다.

다음 장에서 `syntax-quote와 '의 차이점에 대해서 알아보자.

reference

Write a Comment

Comment