Reading Gauche/99.作業ログ/コメント過去ログ


この命令が果たす役割
letrec (ここでドキュメント参照)を実現するために、letrec 動作に従い変数束縛をする

命令中に行われる主な処理
以下の順で変数の束縛が行われる

  1. 変数の個数を命令から取り出す
  2. 変数の個数分の letrec 用ローカル環境を作成する
  3. オペランドから各変数の初期値を取り出し束縛する

命令詳細
knishii2156 さんのまとめをここへ。
compile.scm の partition-letrec-inits 手続きを見ると分かるが初期値は 3種類しかない。

この undefine の部分がドキュメントで触れられている仮想的な undefine 初期値である。
undefine 値はこの命令の直後に別の命令で初期化される(それまでに参照された場合は undefine である)
あとコード例ですが gosh -fno-inline と起動すると、以下のコードでとてもわかりやすいコンパイル結果が得られます。

(disasm
  (lambda ()
   (letrec ([a (lambda () b)]
            [b x])
       a)))

今のローテーションルールでは3つめが満たされていなくて微妙という意見がある。
さてどうするか? やってみると分かるが、1つめの条件と、2つめの条件を満たそうとすると3つめを満たすのは難しい。
となると話は簡単で以下の選択肢のどれかを選ぶことになる。

  1. 同時に進行する数を変える
  2. ペアが同じやり方に戻す
  3. 多少一人に対して連続しても許容する

さてみなさんご意見をお聞かせ下さい。僕は過激に同時進行3つにするという案に1票。

MENU

now: 4

リンク


最新の20件
2018-10-07 2018-09-20 2018-09-03 2018-05-09 2017-09-29 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-05-29 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2439, today: 1, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2009-08-23 (日) 20:00:02 (3344d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 1.207 sec.