[Scheme] 束縛する値を省略できるように let を書き換える

2011 年 6 月 3 日 コメントはありません

Common Lisp では

1
2
CL-USER> (let (a b c) c)
NIL

のように let で束縛する値を省略できる.
省略された変数は nil に束縛される.

しかし,Scheme にはそのような省略記法はない.
そこで,マクロを使い Common Lisp のような略記法を導入する.
次のように書く.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(define-syntax old-let let)
 
(define-syntax %let
  (syntax-rules ()
    ((_ (te ...) () body ...)
     (old-let (te ...)
       body ...))
    ((_ (te ...) ((id e) be ...) body ...)
     (%let (te ... (id e)) (be ...) body ...))
    ((_ (te ...) (id be ...) body ...)
     (%let (te ... (id '())) (be ...) body ...))))
 
(define-syntax let
  (syntax-rules ()
    ((_ e1 e2 ...)
     (%let () e1 e2 ...))))

Common Lisp と同様に束縛する値を省略した変数は空リストに束縛されるようにしている.

カテゴリー: コンピュータ タグ: , , ,

「っポイ!」

2011 年 5 月 28 日 コメントはありません

「っポイ!」が完結した。

といっても、最終巻が出たのが半年前。
連載終了はさらにその1カ月前になる。

というのも、連載終了を聞きつけた当時、手元に既刊がなかった。
いつか書棚を整理したときに、売りに出したのかもしれない。
ともかく、しばらく新刊も追っていなかったので、このたび全巻を一括で手に入れ、通して読んだ。

この作品を初めて読んだのは確か LaLa の紙面上だったと思う。
後半はメロディー誌上での連載だったようだが、当時は LaLa で連載されていた。
タカオカと平の話で、ツバメ中の文化祭で彼女を見せ合うという約束をしていたタカオカと花シマダだったが、花シマダがマコトさんを口説き落とせなかったので、平に女装させてタカオカの前で紹介して……という内容だった。
ちょうど性転換ものとかに興味を持ち出す時期だったからかもしれないが、シゲキ的でもっと読んでいたいと思った。
感情移入の対象は平ではない。タカオカの方だ。

思えば主人公の平は自分にとってあまり感情移入の対象ではなかった。
立ち位置はドラえもんに例えると、「秘密道具を出すのに時間がかかるドラえもん」と言ったところだろうか。
アバターはのび太くんたち。その話の場合はタカオカだった。
トシゴロの心に痛いほど想い伝わってくる。
ソレが心の中にイゾン性のある何かを植えつけた。
のちにBLが好物になったのもその影響かもしれない。

女子の中ではマコトに魅かれる。
後にして思えば、よく見かける造形と性格だが、そこは少女漫画に分がある。
他のボブロングたちの追随を許さぬほど繊細で深く作られている。
描写、扱いをみると1巻からお相手は割れているのだが、やはりどこかでいちご100%のような展開を期待してしまう。
とても清々しく終わった最終巻だったが、心残りがあるとすればこの点だけ。

各話の中での一番人気は再読しても変わらなかった。9巻、第25話だ。
平の父と母の馴れ初めの話で、初読のときは文字通りに枕を濡らした記憶がある。
いつもなら一気に読むには疲れるゴチャゴチャした紙面から目が離せなかった。

再読して当時分からなかったことが分かるようになった、というのもあるが、逆に忘れていた10代の主張というのもあった。
ホッタのこと、アッちゃんのこと、マサキのこと……。
記憶をたどれば自分のことでもある。理解できないはずがない。
忘れていただけだ。

年をとって答えられる部分もあれば、平の出した正解に遠ざかった気もする。
もっともはなからまねはできない。
ともかく彼らは20年間後戻りをしなかった。
私も少しずつでも進みたい。
そう思ったし、それもよいとも思えた。

っポイ! 30 (花とゆめCOMICS) っポイ! 30 (花とゆめCOMICS)
やまざき 貴子

っポイ! 29 (花とゆめCOMICS) っポイ! 28 (花とゆめCOMICS) っポイ! 27 (花とゆめCOMICS) っポイ! 26 (花とゆめCOMICS) っポイ! (25) (花とゆめCOMICS (3189))
by G-Tools

[Mac][Carbon Emacs] site-lisp の場所

2011 年 5 月 24 日 コメントはありません

Carbon Emacsの site-lisp の場所は Application 下においている場合は

 /Applications/Emacs.app/Contents/Resources/site-lisp/

にある.
Finder からは Emacs パッケージを Command + Click すると,ドロップダウンメニューに「パッケージの内容を表示」というのがあるので,それを選ぶとパッケージ内が Finder で開ける.
そこから,Contents/Resources/site-lisp/ とたどる.

参考
Emacsの初期設定ファイル

カテゴリー: コンピュータ タグ: , , , ,

[Common Lisp][Emacs] lisp-modeでの字下げを調整する

2011 年 5 月 2 日 コメントはありません

cl-indent.el を導入すると特別な字下げをする形式や関数を簡単に追加できる。

site-lisp などの path の通った場所に cl-indent.el を置き,.emacs に

(require 'cl-indent)
(setq lisp-indent-function (function common-lisp-indent-function))

と書くと導入できる。

字下げする形式を追加するには define-cl-indent 関数を使う。

例えば, sunless を追加するには .emacs 内に,

(define-cl-indent '(sunless . unless))

のように書く。

(x . y) と書くと x が y の別名になるよう。

cl-indent.el 内には (unless 1) と書いてある。
これは unless 内は1 字下げという意味らしい。
よって,次のようにも書ける。

(define-cl-indent '(sunless 1))

Google日本語入力で簡単に矢印記号を入力する

2011 年 4 月 13 日 コメントはありません

Google日本語入力で「z」に続いて vi のカーソル移動のコマンドに対応する h, j, k l を入力すると,vi でカーソルが移動する方向と対応する矢印記号に変換される.

具体的には,

 z h : ←
 z j : ↓
 z k : ↑
 z l : →

のように変換される.便利.

カテゴリー: コンピュータ タグ: ,

[Scheme] 循環のあるグラフをコピーする

2011 年 3 月 1 日 コメントはありません

コンスセルを使った循環のあるグラフをコピーする関数は次のように書ける。

1
2
3
4
5
6
7
8
9
10
11
12
13
(define (copy-graph-sub ht graph)
  (cond ((not (pair? graph)) graph)
	((hash-table-exists? ht graph)
	 (hash-table-ref ht graph))
	(else
	 (let ((p (cons #f #f)))
	   (hash-table-set! ht graph p)
	   (set-car! p (copy-graph-sub ht (car graph)))
	   (set-cdr! p (copy-graph-sub ht (cdr graph)))
	   p))))
 
(define (copy-graph graph)
  (copy-graph-sub (make-hash-table) graph))

ハッシュテーブルの操作はSRFI-69に沿っている。
Gauche では hash-table-ref は hash-table-get, hash-table-set! は hash-table-put! と書くみたい。

カテゴリー: コンピュータ タグ: , ,

[Git] pushされた内容を反映

2011 年 2 月 25 日 コメントはありません

いろいろな場所で仕事をするので git の bare なリポジトリを一つサーバに置き、 変更を push するようにしている。
たまに、サーバ上でもコードを変更したい時ががあるが、 push された内容がリポジトリの作業コピーに反映されていない。
push された内容を自身の作業コピーに反映させるには、

 % git reset --hard

とすれば良いよう。

カテゴリー: コンピュータ タグ: ,

[Ruby on Rails] flashを初期化する

2011 年 2 月 17 日 コメントはありません

before_filter で flash の中に response を入れようとしたら以降無限ループするようになってしまった.
flash はデータベスの sessions テーブルに入っているようで,

 % rake db:sessions:clear

とすると初期化できた.

カテゴリー: コンピュータ タグ: ,

[RubyGems] ヴァージョンを指定してインストールする

2011 年 1 月 29 日 コメントはありません

RubyGemsでヴァージョンを指定してインストールするには,-v オプションを使う。

# gem install rails -v 2.3.8
カテゴリー: コンピュータ タグ:

[Emacs] ビープ音を鳴らさない

2011 年 1 月 16 日 コメントはありません

Emacs でビープ音(ベル)を鳴らさないようにするには設定ファイル(.emacs)に次のように書く。

  (setq visible-bell t)
カテゴリー: コンピュータ タグ: