アーカイブ

‘コンピュータ’ カテゴリーのアーカイブ

[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 と同様に束縛する値を省略した変数は空リストに束縛されるようにしている.

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

[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)
カテゴリー: コンピュータ タグ:

Windowsでtracerouteする

2010 年 12 月 12 日 コメントはありません

Windows で IP パケットの経路を得るには tracert コマンドを使う。

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