1. 숫자, 분수, 소수, 사칙연산
다른 언어나 비슷하다
1 2 3 4 5 6 |
1+1 2/3 2/3.0 4*6 4*6.0 |
2. 괄호넣고연산
연산자가 함수로 인정
1 2 3 4 5 6 |
(+ 1 1) (/ 2 3) (/ 2 3.0) (* 4 6) (* 4 6.0) |
3. 문자열, 키워드, 캐릭터, 불린
1 2 3 4 5 6 7 |
"bat" :bat \c true false |
4. 컬렉션Collection – 목록형
모든 컬렉션은 Immutable, Persistent
Lisp의 벡터는 인덱스가 있고 리스트는 인덱스가 없다
List ‘(1 2 3 4) – LinkedList
Vector [1 2 3 4] – ArrayList
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'(1 2 "bat" :dog) [1 2 "bat" :dog] (first ~) (rest ~) (last ~) (count (nth 컬렉션 합치기 (cons (cons '(1 2) nil) (cons '(1 2) '()) 항목추가 벡터는 뒤에 리스트는 앞에 (conj |
5. 컬렉션Collectino – Map
Map {:bat “bat1” “dog” “dog0”}
1 2 3 4 5 6 7 8 9 10 11 |
(get (:bat ("dog" (keys (vals 값추가 (assoc ~ :cot "cot0") 값제거 (dissoc ~ :cot) (merge |
6. 컬렉션Collectino – Set
Set #{:bat “dog :cow}
합집합union
차집합difference
교집합intersection
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#{:bat "dog :cow} #{:bat "dog :cow :cow} (require 'clojure.set) (clojure.set/union #{:bat :dog :cow} #{:bat :rat} (clojure.set/difference #{:bat :dog :cow} #{:bat :rat} (clojure.set/intersection #{:bat :dog :cow} #{:bat :rat} (get (:bat ~) (~ :bat) (contains? ~ :bat) (conj ~ :rat) (disj ~ :rat) |
7. def 변수 정의(선언)
1 2 3 4 5 6 7 |
(def bat "bat0") (let [bat "bat0"] bat) (let [bat "bat0" cow "cow0"] bat) (let [bat "bat0" cow "cow0"] bat cow)) (let [bat "bat0" cow "cow0"] [bat cow]))) (let [bat "bat0" cow "cow0"] '(bat cow)) |
8. defn
함수정의
(defn -name [-param0 -param1] -return)
1 2 3 4 |
(defn bat [] "bat0") bat (bat) |
9. fn 익명함수
1 2 3 4 5 6 7 8 9 10 11 12 |
(fn [] (str "bat0" "dog0")) ((fn [] (str "bat0" "dog0"))) #(str "bat0" "dog0") (#(str "bat0" "dog0")) (defn (fn [] (str "bat0" "dog0"))) (#(str "bat0" "dog0" %) "cow0") (#(str "bat0" "dog0" % %) "cow0" "rat0")") (#(str "bat0" "dog0" %0 %1) "cow0" "rat0") (#(str "bat0" "dog0" %1 %2) "cow0" "rat0") (#(str "bat0" "dog0" %1 %3) "cow0" "rat0") |
10. ns 네임스페이스
1 2 3 4 5 |
(ns cat.house) (def cat "cat0") cat (ns dog.house) |