User Tools

Site Tools


tips:clojure:컬렉션_잘_사용하기

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
tips:clojure:컬렉션_잘_사용하기 [2013/01/31 03:53]
127.0.0.1 외부 편집기
tips:clojure:컬렉션_잘_사용하기 [2019/02/04 14:26] (current)
Line 22: Line 22:
 (assoc v 0 -12 1 4 2 :p 3 'k) (assoc v 0 -12 1 4 2 :p 3 'k)
 ;=> [-12 4 :p k] ;=> [-12 4 :p k]
 +</​code>​
 +
 +===== 컬렉션 함수와 키워드/​심볼 함수 =====
 +
 +==== 컬렉션은 함수다 ====
 +
 +<code clojure>
 +([:a :b :c] 2)
 +;= :c
 +({:a 5 :b 6} :b)
 +;= 6
 +({:a 5 :b 6} :c 7)
 +;= 7
 +(#{1 2 3} 3)
 +;= 3
 +</​code>​
 +
 +==== 키워드/​심볼은 함수다 ====
 +
 +<code clojure>
 +(:b {:a 5 :b 6})
 +;= 6
 +(:c {:a 5 :b 6} 7)
 +;= 7
 +(:d #{:a :b :c})
 +;= nil
 +</​code>​
 +
 +==== 컬렉션보다는 키워드/​심볼 ====
 +
 +<code clojure>
 +(defn get-foo [map]
 +  (:foo map))
 +;= #'​user/​get-foo
 +(get-foo nil)
 +;= nil
 +(defn get-bar [map]
 +  (map :bar))
 +;= #'​user/​get-bar
 +(get-bar nil)
 +;= #<​NullPointerException java.lang.NullPointerException>​
 +</​code>​
 +
 +컬렉션의 경우 예외를 발생하지만,​ 키는 단지 nil을 리턴한다. 게다가 위 코드에서 map이 실제 컬렉션이 아닌 경우에도 예외가 발생할 것이다. 물론 키가 키워드나 심볼이 아니고 스트링이나 수이면 컬렉션을 함수로 사용하는 것이 좋을 것이다.
 +
 +==== 고계함수에서 사용하기 ====
 +
 +<code clojure>
 +((juxt :a :b) {:a 1 :b 2 :c 3 :d 4})
 +;=> [1 2]
 +</​code>​
 +
 +<code clojure>
 +(map :name [{:age 21 :name "​David"​}
 +            {:gender :f :name "​Suzanne"​}
 +            {:name "​Sara"​ :location "​NYC"​}])
 +;= ("​David"​ "​Suzanne"​ "​Sara"​)
 +</​code>​
 +
 +<code clojure>
 +(some #{1 3 7} [0 2 4 5 6])
 +;= nil
 +(some #{1 3 7} [0 2 3 4 5 6])
 +;= 3
 +</​code>​
 +
 +<code clojure>
 +(filter :age [{:age 21 :name "​David"​}
 +              {:gender :f :name "​Suzanne"​}
 +              {:name "​Sara"​ :location "​NYC"​}])
 +;= ({:age 21, :name "​David"​})
 +
 +(filter (comp (partial <= 25) :age) [{:age 21 :name "​David"​}
 +                                     ​{:​gender :f :name "​Suzanne"​ :age 20}
 +                                     ​{:​name "​Sara"​ :location "​NYC"​ :age 34}])
 +;= ({:age 34, :name "​Sara",​ :location "​NYC"​})
 </​code>​ </​code>​
  
tips/clojure/컬렉션_잘_사용하기.1359604387.txt.gz · Last modified: 2019/02/04 14:26 (external edit)