2010-01-01から1年間の記事一覧

Emacs + color-theme で自分の好きな配色にする。スクリーンショット100枚ぐらい

Emacs の配色(スキン?) をカスタマイズするには、color-theme をインストールして好みの配色を自分で選ぶのがいいみたいです。100種類ぐらいあります。 以下の手順は Mac OS X 10.6.4、 Aquamacs 23.2.50 で動作を確認しました。 インストール cd ~/.emacs.d…

Aquamacs で対応する括弧がハイライトされない場合

Carbon Emacs から Aquamacs に乗り換えたのですが、Clojure のコードを読み込んだら対応する括弧がハイライトされないことに気付きました。原因は ~/.emacs.el に以下の記述がされていたからでした。 (show-paren-mode) この記述は Carbon Emacs だと対応す…

Clojure + Emacs でのシンボル補完を M-Tab ではなく Tab でやりたい。

swank-clojure(slime) を使うと REPL では Tab でシンボル補完してくれますが、ソースファイル内では M-Tab で補完になります。 インデントは C-i や C-j でできるので、ソースファイル内でも Tab キーひとつで補完したいです。 (add-hook 'slime-mode-hook …

Ubuntu 10.04 での Clojure + Emacs + Leiningen の環境構築

2011/12/29更新 時代遅れの手順になってしまいました。 Clojure+Emacsな開発環境を作る(late 2011) - λab's Blogを参照してください。 ネットブックにUbuntu 10.04 を入れたので emacs から Clojure を使う手順を最初の最初から書いてみる。2ヶ月ぐらい前に…

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

Leiningen + Clojure + Emacs

Leiningen は一発で依存するライブラリ引っ張ってきたりクラスパスの通ったREPLを呼べたりでめっちゃ便利なのですが、Emacsからどうやって "lein repl" を呼ぶんだ?という疑問のため使っていませんでした。 shibuya.lisp#5 の makingさんの発表を聞いて思い…

ポール・グレアム勉強会を開きました

参加頂いた方ありがとうございました。サービスを作られている方、VCの方、Lispが好きな方、いろんな面白い方に参加頂いてとても楽しかったです。参加者の中でディスカッション部分のmp3を希望する方は@fatrowまで連絡ください。 最初の自分の発表部分では静…

ポール・グレアム勉強会

人の名前を勝手に使うのも失礼な話ですが、ポール・グレアムの勉強会なのでポール・グレアム勉強会です。シェークスピア勉強会、レオナルド・ダ・ヴィンチ勉強会、ポール・グレアム勉強会、何もおかしくありません。参加は http://atnd.org/events/3340 から…

ニューロコンピューティングの本

ニューラル・コンピューティング―理論と実際posted with amazlet at 10.03.11Philip D. Wasserman 森北出版 売り上げランキング: 784388Amazon.co.jp で詳細を見る数式が最低限で説明も直感的。一番分かりやすかった。自分みたいにさっと概要を掴みたいだけ…

Y Combinator

Startup Ideas We'd Like to Fund The Request for Startups2008年から公開されているようだが知らなかった。未来への謎解きのように見える。現に今これで触れられているような面白いアイデアのスタートアップが続々と出ている。記事中の ”これは始まりに過…

関数内だけで使うローカル関数定義は defn ではなく letfn を使う

ローカル関数のつもりで defn をネストさせても defn は動的にvarを作っているだけなので関数外からも見えてしまう。 user> (defn aaa [] (defn bbb [] 1) 1) #'user/aaa user> (aaa) 1 user> (bbb) 1 しかも遅い。 (defn aaa1 [] (defn bbb [] 1) 1) (defn …

標準入力ジャック *in* jack

*in* (System.io)からの入力を前提としてしまった関数(*in*がべた書きされている)があり、動作を見るために入力データをファイルから読み込みたい。綺麗なやり方は引数で入力先を渡してやることだが、関数のあちらこちらで入力を読み込んでいてそれを修正す…

Clojure のエレガントなところ

リスト、ハッシュマップ、ベクタ、集合のリテラルがある ;リスト (1 2 3 4) ;ハッシュマップ {:a 1, :b 2, :c 3} ;ベクタ [1 2 3 4] ;集合 #{1 2 3 4} よく使う基本データ型のリテラルがあるというのはソースコードに図が入ってるみたいで考えるよりも早く理…

無名関数で直にmapやvectorを返す時は #() ではなく fn を使う

user=> ((fn [x] [x x]) 1) [1 1] user=> ((fn [x] {:a x}) 1) {:a 1} fn が ok なので #() でもいけそうだと思ったが user=> (#([% %]) 1) java.lang.IllegalArgumentException: Wrong number of args passed to: LazilyPersistentVector (NO_SOURCE_FILE:0…

マクロと関数の識別

初めて(set! (car p) 3)を見た時、違和感を覚えた人は多いと思う。(car p) は p の先頭部が指し示す値を返すのに、set! の引数に渡すと p 自体が書き変わってしまう。僕も最初に見た時は、引数の評価について何か勘違いをしていたんだと思った。 gosh> (defi…

Clojure の シーケンスを python のスライスのように取り出す

(use 'clojure.contrib.test-is) (defn slice ([coll start] (let [start (max start 0)] (drop start coll))) ([coll start end] (let [start (max start 0)] (take (- end start) (drop start coll)))) {:doc "Extract a subsequencet like a slice of pyt…

character のシーケンスをStringに変換

こんなことでずっと悩んでた。apply str で解決。 user> (seq "abc") (\a \b \c) user> (str (seq "abc")) "(\\a \\b \\c)" user> (apply str (seq "abc")) "abc"

Clojure を emacs で

2010/5/6追記:ここの情報は古いので Ubuntu 10.04 での Clojure + Emacs + Leiningen の環境構築 を参照した方が良いと思います。 環境 Mac Snow leopard Carbon emacs 22.3.1まずここをそのままやれば emacsから使う事ができた。 http://riddell.us/tutori…