Kazuki Ohta
mover****@hct*****
2005年 8月 8日 (月) 00:59:29 JST
太田です。 > * sigscheme/eval.c > - Make "and" and "or" properly tail-recursive. > * sigscheme/sigschemetype.h > - Add new function type. > * sigscheme/read.c > - Better treatment of "." (the dot) not followed by > whitespace. > > and, or のために新しい ARGNUM_ enum を追加しました。Properly tail- > recursive な form 全部(if, let, etc...)をこの型であらわすこともできます > が、しんどいのでやめておきました。データ型を圧縮するときまで保留というこ > とで。 ARGNUM_R_NotEval・ARGNUM_R_Evalという関数型は、詳しくソースコードを追 わないとどういった動作を行うタイプの関数かが直感的に分からないので近いうちに 変更しようと考えていました。なので、新しい型を増やす方針は取らないでおこうと 思います。 代替案としてはARGNUM_Rに全て統一し、ARGNUM_R型の関数に以下のように tail recかどうか判定するflagを返させるように変更しようと思っています。こうすると and, orの様にtail recの場合とそうでない場合が混在する場合にも対応できるの で、全体としてすっきり書けそうです。どう思われますでしょうか? ScmObj ScmExp_if(ScmObj exp, ScmObj *envp, int *is_tailrec); > それから、(list a .b) のような入力の扱いはどうしましょう。(ソース参照) 全く考えていませんでした...これからをパッチ見させて頂きます。 > それともう一つ、ARGNUM_2N って何のためにあるんでしょう。見たところ四則演 > 算だけに使ってるようですが、代わりに ARGNUM_NotEval で登録して > > ScmOp_minus (ScmObj args) > { > int result = 0; > while (!SCM_NULLP(args)) result -= > SCM_INT_VALUE(SCM_CAR(args)); } > > みたいにした方がいいのでは? (中間生成物もでませんし)。対にして評価、とか > いうのは各ルーチンの責任であって eval で面倒見るものでもないような気が。 おっしゃる通りで御座います。こちらも変更いたします。 # 明日から4日程旅行に行くのでまた反応が遅れるかと思いますが、御了承下さい。 ------------------------------------------------- Kazuki Ohta : mover****@hct***** -------------------------------------------------