다른 언어의 배열과 마찬가지로, Clojure에서 배열도 컬렉션이에요. Lisp 계열의 다른 언어들처럼, Clojure는 괄호로 배열을 표현해요.
Clojure 배열은 두 가지 방법으로 만들 수 있어요. list 함수로 배열을 만들거나, 리터럴 배열을 quote할 수 있어요.
배열이 특별한 이유는 Clojure가 배열을 _호출_로 취급하기 때문이에요. 호출은 보통 함수인 _연산자_로 시작해요. 배열의 나머지 항목은 _피연산자_로 간주되어, 함수의 인자가 돼요.
Clojure가 배열을 특별하게 취급하기 때문에 배열 리터럴을 직접 만들 수 없어요. quote나 그 축약형인 ' 기호를 사용해 배열을 인용하면, 그 배열을 평가하지 말라는 뜻이에요.
일부 현대 언어와 달리, Clojure 배열은 _이종적_이에요. 즉, 내부에 여러 타입의 항목을 담을 수 있어요. 예를 들어 '(2 "a" "b" 3)처럼요. 다른 Lisp들과 달리, Clojure에서 빈 배열은 참으로 취급되고 nil이나 false와 같지 않아요.
이 연습 문제에서는 Exercism 플랫폼에서 연습할 계획인 프로그래밍 언어 배열을 처리하는 코드를 작성해요.
여섯 가지 작업이 있어요.
언어를 추가하려면 먼저 새 배열을 만들어야 해요. 빈 배열을 반환하는 함수를 정의해요.
(new-list)
;; => ()
Exercism을 둘러보면서 배우고 싶은 언어를 찾으면, 그 언어를 배열에 추가할 수 있어야 해요. 배열의 맨 앞에 새 언어를 추가하는 함수를 정의해요.
(add-language '("Clojurescript") "JavaScript")
;; => '("JavaScript" "Clojurescript")
방금 추가한 언어가 무엇인지 빠르게 확인하고 싶을 거예요. 배열에서 첫 번째 언어를 반환하는 함수를 정의해요.
(first-language '("Haskell" "Python"))
;; => "Haskell"
방금 추가한 언어에 대한 생각이 바뀔 때도 있어요. 배열에서 첫 번째 언어를 제거하는 함수를 정의해요.
(remove-language '("Common Lisp" "Racket" "Scheme"))
;; => '("Racket" "Scheme")
언어를 하나씩 세는 것은 번거로워요. 배열에 있는 언어의 개수를 세는 함수를 정의해요.
(count-languages '("C#" "Racket" "Rust" "Ruby"))
;; => 4
learning-list 함수를 정의하고, 그 안에서 위에서 정의한 함수 몇 가지를 사용해요.
빈 배열을 만들어요.
배열에 새 프로그래밍 언어 2개를 추가해요.
한 해 동안 시간이 부족할 수도 있고 Clojure와 꽤 비슷하기도 하니, 배열에서 "Lisp"을 제거해요.
배열에 프로그래밍 언어 2개를 더 추가해요.
언어의 총 개수를 반환해요. 힌트: 3이 되어야 해요.
(learning-list)
;; => 3
Exercism에 가입하고 Clojure 트랙을 개념 12개연습 문제 105개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.