- 326 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 17:43:50 ]
- >>324
letの初期値の評価順序=lambdaや関数の引数の評価順序だから 無関係ではない。このあいまいさを回避するにはlet*的な関数 呼び出しの定義が考えられる。 (define-macro (order-> func . args) (let ((tmp (map (lambda (_) (gensym)) args))) `(let* ,(map (lambda (x y) (list x y)) tmp args) (,func ,@tmp) ))) (order-> func a b c) ; 評価順序をa -> b -> cに強制する >>314を議論する前に束縛対象(初期値)が関数以外の letrec(=internel-define)について、エラーでないとしたら どう扱うべきかを決めなければ先に進まない。 ちなみにr5rsではletrecの初期値の評価順序は未規定、評価時の 束縛変数への参照や代入はエラーとなっている。
|

|