Destructuring (Clojure)

http://blog.jayfields.com/2010/07/clojure-destructuring.html

パターンマッチの勉強をしていたら、(core.match)
どうも、Destructuringと同じ記法にしています、という話がでてきたので、
destructuringを調べてみた。


↓こんな感じらしい

(def vector-test [1 2 3])
(let [[a b c d] vector-test ]
  (println d))
;; nil
(let [[a & more ] vector-test ]
  (println more))
;; (2,3)  この書き方は、head と tail にベクターを分けるのに便利。なぜか、VectorがListになってるけど。。
(let [[a b ] vector-test ]
  (println b))
;; 2
(let [[a b :as full ] vector-test ]
  (println b)
  (println full))
;; 2
;; [1 2 3]

ちなみに、listにも適用できるようですが、
( 上のvector-test が list-test でもよさそう)
束縛する変数側は、ベクター形式で書いておくようです。




Mapのdestructureは

(def map-test {:x 5 :y 7})
(let [{a :x b :y} map-test] 
  (println a b  ))
;; 5 7

このような感じ