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
'프로그래밍 Programming' 카테고리의 다른 글
클로저 09. 함수 만들기 - defn, fn, 그리고 무명함수 (0) | 2018.08.18 |
---|---|
클로저 08. 심볼과 바인딩 - def, var, let (0) | 2018.08.17 |
클로저 06. 데이터 컬렉션 - 집합 (0) | 2018.08.17 |
클로저 05. 데이터 컬렉션 - 맵 (0) | 2018.08.17 |
클로저 04. 데이터 컬렉션 - 컬렉션의 공통점 (0) | 2018.08.17 |