갈루아의 반서재

728x90

맨 앞에 붙은 ' 기호가 리스트를 만드는 역할을 한다. 이 인용기호가 필요한 이유는, LISP 에서는 식expression 의 첫 요소를 연산자나 함수로 인식하기 때문이다. 그 다음 요소들은 모두 연산자나 함수를 위한 인수로 인식된다.

따라서 인용기호가 없으면, 아래에서 보듯이 문자열이 리스트의 첫 요소로 있어서 함수로 인식하여 호출하려고 하기 때문에, 에러를 발생시킨다. 문자열은 함수가 아니다.  

1
2
3
4
5
6
7
8
 
user=> ("marmalade-jar" "empty-jar" "pickle-jam-jar")
ClassCastException java.base/java.lang.String cannot be cast to clojure.lang.IFn
user/eval1302 (form-init6896280774253315633.clj:1)
 
user=> '("marmalade-jar" "empty-jar" "pickle-jam-jar")
("marmalade-jar" "empty-jar" "pickle-jam-jar")
user=>
 
cs

덧셈 연산식 앞에 인용기호를 붙여보자. 다음과 같이 숫자 2가 아니라 식을 반환한다.

클로져는 아래를 다음과 같이 3개의 요소를 갖는 리스트로 인식하는 것이다.

연산자 + 정수 1 + 정수 1

1
2
3
4
 
user=> '(+ 1 1)
(1 1)
 
cs

리스트로 취급하므로 첫 요소를 가져올 수 있다. 

코드도 데이터로 취급될 수 있는 것이다. 

모든 클로져 코드는 데이터의 리스트로 구성되어 있다.

1
2
3
4
5
 
user=> (first '(+ 1 1))
+
user=>
 
cs


728x90