Clojureインストール

sudo port selfupdate
sudo port install clojure +rlwrap

主にここを参考にした:http://e-arrows.sakura.ne.jp/2010/01/clojure-install-on-mac.html
+rlwrapの意味がよくわからなかったので調べてみると,
Netsphere Engineering: Clojure: first step
+readlineというのもあるらしい.readlineの親戚かな.
Clojure Programming/Getting Started - Wikibooks, open books for an open world
によると,readlineよりrlwrapがおすすめ,ってことでいいんだろうか.


こんな感じにインストールできた.

$ which clj
/opt/local/bin/clj
$ clj
Clojure 1.1.0
user=> (+ 2 3)
5
user=> ^D
$


Clojure - 紫藤のWiki
Clojure - Page Not Found
個人的に気になったのは:

  • Lisp-1(素晴らしい)
  • 末尾最適化しない(loop, recurを使う?)
  • `はgensymする(面白い)
  • vector, map, setのリーダシンタックス(Rubyとか触ってると,Schemeにもmap系のリテラルが欲しくならない?)
  • true/false/nil(Rubyみたい.nilも偽のようだ)
  • #(...) => (fn [args] (...)) (cutが短く書ける+順序指定付き,fnはlambda)
  • アリティによる多重定義(Haskellのパターンマッチを知ってると中途半端に見えるけど,どうなんだろう)
  • cons、first、restは抽象的なシーケンスを扱う(car,cdrはない)
  • 殆どのデータ構造はイミュータブル
  • readが副作用を生じない(よくわからない)
  • Java VM上で動いてGUIが簡単

あと,

全ての変数は局所的な変数束縛に左右されずに動的に再束縛される。動的変数と局所変数を区別する為のスペシャル宣言は必要としない。ClojureLisp-1の為、関数は動的に再束縛される。

がよくわからない.Common Lispを知らないせいだろうか.
それから,Clojure - Functional Programmingのletの所で

(defn make-adder [x]
  (let [y x]
    (fn [z] (+ y z))))

と書いてるけど,

(defn make-adder [x]
  (fn [y] (+ x y)))

とは違うのかな?letとfnで違ったら驚く.