さかもとのブログ

つらつらと

2009-08-01から1ヶ月間の記事一覧

OnLisp第11章do-tuples/c

clispの組み込みのwith-gensymsを使って,do-tuples/cを定義する場合,OnLispに載っているままではエラーになってしまう. [195]> (load "***.lsp") ;; Loading file ***.lsp ... *** - CONCATENATE: SRC is not a SEQUENCE The following restarts are avai…

clispのwith-gensyms

OnLispのP.149でwith-gensymsを定義しているのだが,clispにはもともとマクロで定義されている. Similar to its namesake from Paul Graham's book “On Lisp”, this macro is useful for writing other macros: (with-gensyms ("FOO-" bar baz zot) ...) ex…

OnLisp第11章condletの定義で知ったCommon LispとScheme(Gauche)のletの違い

タイトル長いけれど,言いたいのは, common lispでは [81]> (let (a b c) (list a b c)) (NIL NIL NIL) Gaucheでは gosh> (let (a b c) (list a b c)) *** ERROR: Compile Error: syntax-error: malformed let: (let (a b c) (list a b c)) "(stdin)":181:(…

OnLisp第7章より

ただのメモです. マクロは呼び出せるし値を返せるので,関数と一緒くたにされがちだ.マクロ定義は関数定義に似ていることもあるし,実際はマクロであるdoを普段「組み込み関数」と呼ぶ人も多い.しかしこの喩えを突き詰めすぎると混乱のもとになる.マクロ…

foldを使う

簡単にまとめると、明示的な再帰を用いるプログラミングスタイルはよろしくないと言うこと。Haskellwikiにもそう書かれている。良い関数型プログラマは再帰を用いず再帰をパターン化した高階関数を使うのだそうだ。 maoeのブログ ということで,OnLispを少し…

同じ文字をまとめる

http://www.shido.info/gb/guestbook.php?id=1413 common lispでの実装を通して,schemeとの違いが書かれている. このページに (pack '(a a a a b c c a a d e e e e)) ((A A A A) (B) (C C) (A A) (D) (E E E E))と結果が返ってくるような関数packが載って…

茂木健一郎さん×白洲信哉さん トークショー

茂木健一郎さん×白洲信哉さん トークショー 行きたいな...茂木さんはまぁいいんだけど、白洲さんが何をお話になるのか...なんたって小林秀雄の血が流れている!しかし、場所がリッツカールトン東京...嫌な予感が...やはり参加費は3万円...高い!無理だ。しか…

SICP終了

SICP終了します。最後の問題がいくつか残っているけれど、とりあえずこれでいったん終えます。初めのほうはここには記録を残していないので、いつ始めたかわからない...と思ったらノートに 日付が!4月25日に始めたようです。 SICPによって得られたもの... S…

SICP演習問題5.48

演習問題を少し飛ばして,5.48です. しかもかなり適当...一応EC-EVALから,compile-and-goを呼び出せますが,compile-and-goを呼び出す度に,ecevalを初期化してしまうので,コンパイル済みコードは1つしか環境に登録できませんw 方法は至って簡単.eceval…

SICP演習問題5.42

(define (found? var) (if (not (eq? var 'not-found)) var false)) (define (compile-variable exp target linkage compile-time-env) (let ((found (found? (find-variable exp compile-time-env)))) (end-with-linkage linkage (make-instruction-sequenc…

SICP演習問題5.41

(define (first-frame env) (car env)) (define (first-variable frame) (car frame)) (define (find-variable variable env) (let ((frame-num 0) (variable-num 0)) (define (scan-frame env) (if (null? env) '() (let ((frame (first-frame env))) (if (…

SICP演習問題5.40

コード生成関数のすべてに翻訳時環境を追加。(コードは略) (define (compile-lambda-body exp proc-entry compile-time-env) (let ((formals (lambda-parameters exp))) (print "compile-time-environment: "compile-time-env) (append-instruction-sequence…

SICP演習問題5.39

たいぶおかしなコードですがお許しください。 (define (search-frame frame-num env) (define (scan-frame count env) (cond ((null? env) (error "search-frame" frame-num env)) ((= count frame-num) (car env)) (else (scan-frame (+ count 1) (cdr env)…

演習問題5.40について

め、め、め、めんどーだ.......コード生成関数のすべてに翻訳時環境を追加するって...

SICP演習問題5.35

今回は,載っている翻訳済のコードを生み出すような式をもとめよ,という問題 翻訳済のコードは以下のもの.(SICPのサイトより抜粋) (assign val (op make-compiled-procedure) (label entry16) (reg env)) (goto (label after-lambda15)) entry16 (assign e…

SICP演習問題5.34

factorialの反復的プロセス版を翻訳する (print-after-compiler (compile '(define (factorial n) (define (iter product counter) (if (> counter n) product (iter (* counter product) (+ counter 1)))) (iter 1 1)) 'val 'next)) 結果 (env) (val) (assi…

SICP演習問題5.33

昨日のprint用の関数を少し直した. (define (print-after-compiler proc) (newline) (for-each (lambda (x) (if (not (pair? (car x))) (print x) (for-each (lambda (y) (if (symbol? y) (print y) (print " "y))) x))) proc)) 今回の問題は (define (fact…

SICP演習問題5.36, 5.37

5.36 operandsを評価するのは (define (compile-application exp target linkage) (let ((proc-code (compile (operator exp) 'proc 'next)) (operand-codes (map (lambda (operand) (compile operand 'val 'next)) (operands exp)))) (preserving '(env con…

コンパイラ

5.5ではコンパイラを作成する. なんとか動くものはできたけど、全然理解できていない. 最後の節は訳がひどい!が,原著もなかなかわかりにくい... 翻訳のほうは,なんであんなに点の使い方が下手なんだろう.せめて点をうまく使えば,直訳だとしても,意味…

ついに5.5に入る

5.29, 5.30があるけれど、パスして5.5に入る。 ついに最後です!

SICP演習問題5.26, 5.27, 5.28

3問続いているけれど,やることは同じなのでまとめてしまう. 5.26 (define (factorial n) (define (iter product counter) (if (> counter n) product (iter (* product counter) (+ counter 1)))) (iter 1 1)) を実行するときのスタックを監視せよという問…

積極制御評価器と演習問題5.23, 5.24

積極制御評価器...漢文みたいな名前. 5.23と5.24が組み込んであります. reg-machine-with-meter.scmはレジスタ計算機のスタック監視機能がついているもの. evaluator.scmは4.1の超循環評価器のapply,evalを削除したもの. (load "~/hoge/foo/reg-machine-…

アンデルセン

童話作家ハンス・クリスチャン・アンデルセンの物語。裸の王様、みにくいアヒルの子、人魚姫などのアンデルセンの代表作も劇中にでてくる。 音楽、ダンスがとてもすばらしく、ぜひ子供たちに見てもらいたい作品。 私は、5月に、四季劇場「秋」で観劇しました…