2010-04-01から1ヶ月間の記事一覧

Clojure の式の評価を追跡するツール eyewrap

user> (cap (* 2 (+ (- 3 8) 4))) 0 : + (* 2 (+ (- 3 8) 4)) 1 : + (+ (- 3 8) 4) 2 : + (- 3 8) 2 :=> -5 1 :-> (+ -5 4) 1 :=> -1 0 :-> (* 2 -1) 0 :=> -2 -2 fatrow's eyewrap at master - GitHub式の返してくる値だけじゃなくて、中でどの式がどう評価…

cond をスリムにする condp

普通の cond (defn cond1 [x] (cond (= x :hey) "Hey!" (= x :bye) "Bye!" (= x :hi) "Hi!")) 重複するパターンがあります。condp を使うとスマートに。 (defn condp1 [x] (cond = x :hey "Hey!" :bye "Bye!" :hi "Hi!")) 次の例はちょっとトリッキーなので…

リストではなくシーケンスに入っている関数呼び出しも実行できる

macroexpand は展開結果をリストじゃなくてシーケンスで返してくるのにちょっと驚いた。 user> (macroexpand '(-> 1 (+ 2) (- 3))) (- (clojure.core/-> 1 (+ 2)) 3) user> (type (macroexpand '(-> 1 (+ 2) (- 3)))) clojure.lang.Cons user> (seq? (macroe…

仮引数の評価

Lispの初歩的な事で納得できねぇと悶々していたけど、納得できた。 評価について。 クオートが付いてるのは評価されるとクオートが一つ剥がれてシンボルやリストそのものになる。クオートが付いていないリストは評価される=関数が実行される。まず、簡単な…

無限にメモ化しない memoize

memoize で上限を設定できたらいいのになぁと思って、hackathonの時に作ってましたが Clojure Google Groupにそのものズバリのスレッドがありました。bounded memoizehttp://groups.google.com/group/clojure/browse_thread/thread/36a13d150d830683議論の末…

HTML と Clojure のコードを分離するテンプレートシステム Enlive

cgrand's enlive at master - GitHubEnlive は html と Clojure のコードを完全に分離できるのが特徴のテンプレートシステムです。つまり、テンプレート元の html はピュアな html であり、コードはピュアなClojureのコードなのです。デザイナーとプログラマ…

Clojure + Emacs のキーバインド

swank-clojureの機能なのかslimeの機能なのかclojure-modeの機能なのか知らないのですが。 M-. カーソル位置のシンボルを定義しているソースまで移動。jarの中のファイルも見れて便利! M-, 飛んでから戻る M-TAB 補完 (単にTABだけでいいと思うが特にカスタ…

Clojureでクラスパスを表示する

(use 'clojure.contrib.pprint) (pprint (seq (.getURLs (java.lang.ClassLoader/getSystemClassLoader)))) しょっちゅう必要になるのでこれ用の関数があってもいい気がする。 参考: Printing the class-path in Clojure