2021-12-09
Vimでインデントをタブではなくスペース4つにする方法
Vim内で以下を実行する。
:set tabstop=4 :set autoindent :set expandtab :set shiftwidth=4
または ~/.vimrc
に以下を記入する。
set tabstop=4 set autoindent set expandtab set shiftwidth=4
設定を変えた後、すでに書かれている行を再インデントするには:
- 特定の行だけ再インデント
Shift+V
で行選択モードにする- カーソルを移動して行を選択する
=
を入力する
- 全体を再インデント
gg=G
を入力する
2021-12-18
bit誌のVol. No. 通巻の関係
- Vol: 創刊年1969を1とする年数
- Vol = Year - 1968
- No: 発行月
- 通巻Issue = (Year - 1969) * 12 + (No - 2)
たとえば1996年4月号はVol.28、通巻326になる。
- Year = 1996, No = 4
- Vol = 1996 - 1968 = 28
- Issue = (1996 - 1969) * 12 + (4 - 2) = 326
2021-12-27
Schemeのアクタ機能
bit 1996年4月号の記事『Scheme 現在・過去・未来』には次のようなことが書かれていた。
- Carl HewittはロボットやAIのプログラミング用言語としてPlannerの次にPlasmaを作った
- Plasmaではアクタがメッセージを送り合う
- Gerry SussmanとGuy L.Steele JrはPlasmaを理解するためにLispでインタプリタを作成した
- アクタとメッセージ送信機能を持ったLispであるSchemeが完成
記事によるとSchemeのアクタは次のように記述・動作するらしい。
(alpha (引数 ...) (本体))
でアクタを作成するsend
は他のアクタにメッセージを送るsend
には2つの書式がある- 書式1:
(send アクタ メッセージ)
- 書式2:
(send 演算子 引数 ... アクタ)
- 書式2は演算結果をメッセージとしてアクタに送る
- 書式1:
- アクタはメッセージが届くまで動作しない
- アクタは値を返さない
記事にあったアクタによる階乗計算のコード:
(define actorial --- (1) (alpha (n c) (send = n 0 --- (2) (alpha (p) (if p --- (3) (send c 1) --- (3) (send - n 1 --- (3) (alpha (m) (send actorial m --- (4) (alpha (z) --- (4) (send * n z c))) --- (4) )))))))
- 最初の
define
〜alpha(n c)
で値n
とアクタc
(このアクタに結果が送られる) を引数として受け取る - 次の
(send = n 0 (alpha〜))
はn
が0かどうかの結果をアクタ(alpha 〜)
に渡す - n=0が真ならば呼び出し元
c
にメッセージ1を送り、偽ならばn
を1減算した値を後続のアクタに渡す actorial
に再帰的にメッセージを送り、受け取った結果とn
を掛けて呼び出し元のアクタにメッセージとして送る