odaiba日記
ちょw、聞くなよw
= 「新世界より」の楽譜を入手。あの有名なフレーズはオーボエなんですね。
= お台場のラボに50インチのディスプレイが入るという話は聞いていたけども、 来てみたらハンドライティングシステムまであった! 50インチのタッチパネル!ぎゃー!
と思ったけど、実はハンドライティングシステムってそんなに高くないようだ。 23万円くらい。 ディスプレイの方は価格がわからなかったけども、似たような型番のものだと75万くらいか。 熱帯魚に100万とかかける人もいるようだから、 自宅に50インチタッチパネルってのもありかも知れない。
書道できる。
= メリ!ハリ!メリ!ハリ!
= 校正していて思ったのだけど、 「実際の」が多すぎる、自分。 実際のところ、「実際の」は全部削っても問題がない。
= 20時。おなかすいた。
= Emacs Lisp、キライ。 GRINEditを呼び出す関数群を一つのジェネレータから作るようにしようとしたらうまく行かず。 原因を調べていたら、
(defun foo (x) (lambda (y) (+ x y))) ((foo 1) 2)これがエラー。 まず関数と変数の名前空間を区別しているので関数が呼びたければ下のようにしなきゃいけない。
(funcall (foo 1) 2)でもって、これでも(void-variable x)というエラーになる。 lambdaの中で使われているxは外のxを参照できていない。 キライ。 Schemeなら
(define (foo x) (lambda (y) (+ x y))) ((foo 1) 2) ;=> 3と非常にわかりやすいのに。 Emacs Lispでパラメトライズされた関数群を返したいときにはどうしたらいいんだろうか。
GNU Emacs Lisp Reference Manual - スコープと Extent。 うーん。僕がやろうとしていることはやろうとしている方法ではできないと言うことか…。
はっ。マクロを使うのか?!
GNU Emacs Lisp Reference Manual - マクロ
(defmacro foo (x) (list 'lambda (list 'y) (list '+ x 'y))) (funcall (foo 1) 2) ;=> 3マクロを使ったら出来た。えー。
で、やりたかったことはこれなんだが…
(defun generate-process-caller
(script-name)
(lambda ()
(interactive)
(call-process-region
(point-min)
(point-max)
script-name)))
こうなるのか?↓
(defmacro generate-process-caller
(script-name)
(list 'lambda '()
(list 'interactive)
(list 'call-process-region
(list 'point-min)
(list 'point-max)
script-name)))
うまく動いた。うーん。
いまいち好きになれないなぁ、これ。
以上、実は「はじめてのマクロ」でした。
Scheme、Common Lisp、Emacs Lispの比較。 ふむふむ。やっぱり僕の好みはScheme > Common Lisp > Emacs Lispの順かなぁ。
= おなかの調子が悪い。
= メリハリ。ハリって疲れたのでメリの時間なんだけども、 疲れすぎてウダーを練習する気力がでない。ううむ。 まぁ一応つなぐだけつなごうか。
フィードバック
楽器は毎日やんないとだめだじょ~