id:shinichiro_hさんからコメントを頂きました。ありがとうございます。 『たぶん実装は似たものになると思うのですが、コルーチンですと Ruby や Io なんかから実装ひっこ抜いてきたらそれなりに動いた経験があります。 あと PCL も参考になるかなと思いますが。Scheme の継続をわかってないので外していたらすいません。』確かに coroutine の実装は context save context restore が共通しているのでとても参考になりそうです。(それを言ったら OS 側での context restore もほぼ同じだけど、ユーザー側でどう工夫しているかは知りたいところでもあります。) 共通しないところとしては、Scheme 継続の場合 longjmp とは逆方向への jmp が必要なので、スタックの一部を save/restore しなければいけない点でし
No contributions on Sunday, June 19, 2022 No contributions on Monday, June 20, 2022 No contributions on Tuesday, June 21, 2022 No contributions on Wednesday, June 22, 2022 No contributions on Thursday, June 23, 2022 No contributions on Friday, June 24, 2022 No contributions on Saturday, June 25, 2022 No contributions on Sunday, June 26, 2022 No contributions on Monday, June 27, 2022 No contributio
昨日書いた以下のコードですが (define (message-join l) (call/cc (lambda (end) (letrec ((message-join-iter (lambda (ll messages) (if (null? ll) (end messages) (message-join-iter (cdr ll) (string-join (list messages (car ll)))))))) (message-join-iter l ""))))) (display (message-join (list "muda" "na" "join" "dane\n"))) zickさんから、ありがたいツッコミを頂きました。 # zick 『message-join-iterはtail recursiveだから、 脱出してもあまり嬉しくない気がするんですが……。
Appendix 3. 継続についてもう少し 以下の文章は、以前継続について書いたものです。 皆様の継続の理解に役立てば幸いです。 1. はじめに Scheme の継続は大変強力だそうです。ただ、理解するのは大変難しく、実は紫藤もよくは理解していません。 ここでは備忘録を兼ねて継続について詳しく説明しようと思います。 Scheme は言語体系は小さいのですが、それによってほとんどのプログラミング技法が表現できるように 設計されています。他の言語に見られるような便利な機能は無いのですが、その分アルゴリズムを直接 記述できるので主に教育用言語として使われています。有名な 計算機プログラムの構造と解釈に記載されている プログラムは Scheme を用いて書かれています。なお、 実用的には全く用いられないということは無く、 Practical Scheme に事例があります。 継続を除いて、Sch
Schemeは継続(continuation)という、たいへん強力で柔軟な制御機構を備えています。継続を用いれば大域脱出、コルーチン、疑似マルチタスク、バックトラックといった特殊な制御を必要とするプログラムを効率的に記述することができるのです。しかし一方でその抽象度の高さから、「継続は難しいもの」という印象も強いようです。 ここでは継続の正確な定義はとりあえず後に回し、直感的な観点から継続を導入してみたいと思います。 話を簡単にするため、今全ての手続きが1-in/1-outであるような1-Schemeというものを考えます。例えば: (define (double x) (* x x)) (double 2) => 4 (define (add1 x) (+ x 1)) (add1 2) => 3 のような手続きが1-Scheme手続きです。 (なおSchemeではlambdaを自由に導入で
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く