scheme

Scheme どう書く?的

整列済みの number のリストがある。'(1 3 4 5 6 12 13 15)このようなリストで数が連続している部分は '(1 2 3) -> '(1 . 3) のように両端のみを書くような記法を導入する。最初の例のリストであれば以下のようになる。'(1 (3 . 6) (12 . 13) 15)このような…

3imp ((lambda(x) x) 9) が実行される様子

3impの3章に出ているスタックベースのSchemeVMで ((lambda(x) x) 9)がどのように実行されるのかみてみた。コンパイル結果は以下のようになった。 ======================================================================== ((lambda (x) x) 9) => (frame (…

3imp で (+ 3 4)を実行してみる

vmで各レジスタやスタックの中身をデバッグプリントするようにしたので入力されたコードが実行される様子がわかりやすくなった。例えば以下のコードは (run '(+ - * / cons car cdr a) (list + - * / cons car cdr 1) '(+ 3 4))このように表示される。(日本…

3impでプリミティブ関数

3impで紹介されているスタックベースのScheme処理系は、そのままではプリミティブ関数が実行できないのでちょっと細工してみた。まずはcompileを以下のように変更し、applyインストラクションに手続きに適用する引数の数を指定する。 . . 略 . [else (let lo…

3impのスタック機械

コンパイルしてできた命令列のリストを脳内でVMに渡してシミュレートする、という事をやってたんだけど、これじゃああまりにもあんまりなんで実行中のスタックや各レジスタの状態が一目でわかるようにVM関数のなかにデバッグprintをはさんでみた。まずは各レ…

Scheme処理系の作成

SICP -> 『プログラミング言語処理系』 -> ドラゴンブック と読み進んで、今、Scheme(R5RS)のサブセットの処理系をCで実装しています。 抽象構文木(AST)をたどりながら逐次実行していく、というSICPの4章に出てきたものをそのままCで実装しました、というよ…

UbuntuへSLIBを導入

http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aFAQ#H-1wd28wz ↑を参考にしました。まずは、apt-get。 apt-get install slib Gaucheのライブラリのパスを確認。 gauche-config --syslibdir 念のためバックアップ cp slib.scm slib.scm.default sli…

SICP

[scheme]SICP 2章の終盤まで読んだ。 3章はどんな展開になるんだろうか・・・。ワクワクする。

C-8でカーソル位置に()を挿入

(defun lisp-insert-pair-paren() (interactive) (insert "()") (backward-char 1)) (add-hook 'scheme-mode-hook '(lambda () (define-key scheme-mode-map [?\C-8] 'lisp-insert-pair-paren)))