Entries from 2007-02-01 to 1 month
GCの実装をはじめよう
ご迷惑をおかけしました http://rimo.tv
dynamic-wind がそれとなく動いた。 id:higepon:20070221:1172068276で挙げた例は、期待した通りに動作している。以前 libcont をリリースしたときに、ささださんから> dynamic-wind 相当をどうライブラリレベルで提供するかが難しそう.とコメントをいただ…
On Lisp コンピュータ書籍専門ネット書店 cbook24
ChangeLog メモを書くときに、clmemo.elを使っていたのですが、C-x M(メモ入力) しか使っていませんでした。 が!それは大きな間違い、C-c C-y や C-c C-w は ChangeLog メモ魔なら、よだれが出るほどうれしいはず。 これを知らなくてかなり時間や手数を無…
動的寿命 1 呼び出された手続きの本体が始まる時,その動的寿命に入る 呼び出された手続きが戻る時,その動的寿命は終わる (dynamic-wind (lambda () (display "a")) (lambda () (display "b")) (lambda () (display "c"))) abc#<undef> gosh> 動的寿命 2 動的寿命</undef>…
call-with-values / values の実装。 R5RSによれば values は以下のように call/cc を用いて定義できるらしい。 (define values (lambda things (call-with-current-continuation (lambda (cont) (apply cont things))))) call/cc をうまいこと拡張しつつ ca…
自作の String/Pair が出来たのでインタプリタから STL が完全に削除された。 STLを使わなくなって コンパイルが速くなった 継続が安定して動くようになった 実行速度があからさまに遅くなった ★ 遅くなった理由を調べる gprof で調べてみると。 Each sample…
apply call-with-values の実装をしようと思って、いろいろ考えていたら内部実装の apply の引数が良くない気がしてきた。 apply(Objects* arguments, Environment* environment)いまはこうなのだけど(Objects は Object の vector) apply(Pair* arguments, …
継続の実装に使用した libcont は C++ のデストラクタが複数回呼ばれてしまう可能性がある。(正確には auto 変数のデストラクタ) そのため std::vector/map の使用をやめて自作の Vector/HashMap と入れかえた。 この自作の Vector/HashMap はデストラクタが…
http://rimo.tv/ ぜひお試し下さい。
引数をヒープ上の vector に積んでいたので、継続からの復帰で引数の数があわなかったりしていた。 (define cont #f) (+ 5 (call/cc (lambda (c) (begin (set! cont c) 10)))) (cont 20) 例えば、(cont 20)を呼ぶと (+ 5 10 20)みたいに評価されて悲しい感じ…
間違うことで初めて理解できることってのは確実にあるよなぁ。 良くできる人に先回りして答えを教えてもらっても、やってみて間違わないと理解できない。 継続の実装で困って、インタプリタ内の引数の受渡し方法やら、Cスタックをそのまま使うことのあれこれ…
call/cc の良い unit testを探していたら、結城さんのところで良いのを発見。 g:sicp:id:hyuki:20060506:cont3 (define find (lambda (pred list) (call/cc (lambda (return) (for-each (lambda (e) (if (pred e) (return e))) list) #f)))) (assert-check-t…
やっといろいろ落ち着いて call/cc の実装に取り掛かる。 まず libcont にバグがあったので修正して 0.0.2 をひっそりとリリース。 (われながら非常にマイナな上に、手抜きなライブラリだと思う)その後、call/cc を呼んでも落ちなくなるところまでこぎつけ…
軽い気持ちで transcript-on を実装してはまる。 あれれ。自分の出力が自分の入力に!。
髪を切る場所で cut を2冊くらい斜め読みしていたのですが、予想外にためになるというか面白かった。 1ページ丸々人の顔とかだったりするのが良いよなぁ。 結構感動したので、まずは2月号を購入。 学研の科学以来の定期講読入りかも知れぬ。 そういえば cut …
1000m。 750m-1000mの間を泳いでいるときに筋肉が熱くなるよねー。
Emacs で正規表現を使うならば re-builder を使うことをおすすめします。 例えば、正規表現を良く使うシチュエーションとして置換があります。 M-x replace-regexpで置換対象文字列を正規表現で指定し、何に置換して欲しいかを指定するわけです。 行頭に // …
外部ライブラリを眺めていると (lambda l 本体) みたいに、引数を () で囲っていないのがあって、「あー。引数が1つのときは()を省略できるのだな。(lambda (l) 本体) と同じだ。」と思っていたんだけど。 その後いろいろ動かなくて、よーくコードを眺めてい…
手続きに期待されない数の引数を渡すと落ちるバグを直した。 これで大分落ちなくなるだろうと予想される。
今日は浅草・上野方面におでかけ。 まずランチを上野の守よしで食べる。 ここの親子丼は卵の味をいかした薄味で超うまい。 赤だしの味噌汁も格別。 続いて浅草の合羽橋道具街に行き、カップ、スープパスタ皿を購入。 あと包丁専門店で[rakuten:hands:491216:…
ライブラリ手続きとして流用できそうなコードを見つけたのでこれを取り込む方向で決めた。 ふと気づけば、「名前つき let 」と「可変長引数」の実装を忘れていたので、まずは実装。 名前つき let は頭の中にこう変換すれば書けるみたいなのがあって、その通…
char-ready? だけが、すぐに実装方法が浮かばなかったのだけど、良く考えたら select 使えば良いだけ。 with-input-from-file とかは、あー便利そうだなぁ。なるほどなと思わせる仕様だよな。ついでに後回しにしてい数字まわりを実装した。 といっても、超手…
遅くなりましたが junjunn さんの描画高速化の成果を trunk/mona に取り込みました。 memset高速化 memcpy高速化 計算量を減らす などの方法がとられています。素晴らしい。 以下 diff です。
今日は port 周りの実装をした。 時間切れで char-ready? / call-with-input-file / call-with-output-file などが未実装。 明日やろう。
even?odd?procedure?boolean? を実装した。 R5RSのライブラリ手続きを Scheme で実装したライブラリどこかにないかなぁ。 MIT/X ライセンスと相性が良かったら更に良いな。
apply/undef(不定)/exit を実装した ところで R5RS の手続きをどれくらい実装したかを ChangeLog で管理するのがあまり楽しくない。 そこで Google Spreadsheets で管理 / 公開してみるテスト R5RS Scheme procedures意外と楽しいっす。
id:rui314さんに教えてもらった rlwrap が超便利。 自前のインタプリタで履歴やら、いろいろなキーバーインドが使えるようになった。 詳しくは id:secondlife:20060607:1149653094 あたりをみるとよいでしょう。 適当なシェルスクリプトを書いてみた。 #!/bi…
ありゃりゃ