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 と同様に束縛する値を省略した変数は空リストに束縛されるようにしている.
Carbon Emacsの site-lisp の場所は Application 下においている場合は
/Applications/Emacs.app/Contents/Resources/site-lisp/
にある.
Finder からは Emacs パッケージを Command + Click すると,ドロップダウンメニューに「パッケージの内容を表示」というのがあるので,それを選ぶとパッケージ内が Finder で開ける.
そこから,Contents/Resources/site-lisp/ とたどる.
参考
Emacsの初期設定ファイル
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日本語入力で「z」に続いて vi のカーソル移動のコマンドに対応する h, j, k l を入力すると,vi でカーソルが移動する方向と対応する矢印記号に変換される.
具体的には,
z h : ←
z j : ↓
z k : ↑
z l : →
のように変換される.便利.
コンスセルを使った循環のあるグラフをコピーする関数は次のように書ける。
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 の bare なリポジトリを一つサーバに置き、 変更を push するようにしている。
たまに、サーバ上でもコードを変更したい時ががあるが、 push された内容がリポジトリの作業コピーに反映されていない。
push された内容を自身の作業コピーに反映させるには、
% git reset --hard
とすれば良いよう。
before_filter で flash の中に response を入れようとしたら以降無限ループするようになってしまった.
flash はデータベスの sessions テーブルに入っているようで,
% rake db:sessions:clear
とすると初期化できた.
RubyGemsでヴァージョンを指定してインストールするには,-v オプションを使う。
# gem install rails -v 2.3.8
Emacs でビープ音(ベル)を鳴らさないようにするには設定ファイル(.emacs)に次のように書く。
(setq visible-bell t)
Windows で IP パケットの経路を得るには tracert コマンドを使う。
最近のコメント