本買った

プログラミングClojure

プログラミングClojure

本屋で見かけたのでついうっかりと。Scalaの本は迷った挙句にやめたのに……大きさが手頃だからかも。

で,第1章 Getting Started と第2章 Clojureひとめぐり だけ読んでみた。以下メモ。

  • JVMの上で動くLisp リ・ローデッド。
  • カッコはやや少ない。
  • 関数型。
  • Javaのクラスが利用できる。
  • 並行プログラミングが簡単。
  • 動的型。
  • 一般にデータは変更不可能だけど,リファレンスは状態を持つことができる。
 user=> #{}
 #{}
 user=> (def visitors (ref #{}))
 #'user/visitors
 user=> (dosync (alter visitors conj "Stu"))
 #{"Stu"}
  • マクロとリーダマクロがある(どうちがう?)
  • マップ
 user=> {:Lisp "McCarty", :Clojure "Hickey"}
 {:Lisp "McCarty", :Clojure "Hickey"}
  • :(コロン)出始まってるのはキーワード。Ruby の Symbol のようなもの。
  • マップは関数としても働く。引数としてキーを与えると対応する値が返る。
 user=> ({:Lisp "McCarty", :Clojure "Hickey"} :Clojure)
 "Hickey"
  • キーも関数として働く。引数としてマップを与えるとキーに対応する値が返る。
 user=> (:Clojure {:Lisp "McCarty", :Clojure "Hickey"})
 "Hickey"
  • 関数を定義するには defn。もちろん無名関数もあり。
  • 分配束縛。
  • 副作用を扱うには,do を使う。この do は Haskell のとはべつもの。
 user=> (defn is-small? [number]
   (if (< number 100)
     "yes"
     (do
       (println "Saw a big number" number)
       "no")))
 #'user/is-small?
 user=> (is-small? 101)
 Saw a big number 101
 "no"