[Anthy-dev 2299] r5rs : SigSchemeのFUNC_TYPE整理

Zurück zum Archiv-Index

Kazuki Ohta mover****@hct*****
2005年 8月 27日 (土) 03:55:57 JST


太田です。

とりあえず今までの意見を参考にまとめてみました。

まずは単純に引数を定数個取る関数型
* FUNCTYPE_1
* FUNCTYPE_2
* FUNCTYPE_3
* FUNCTYPE_4
* FUNCTYPE_5

末尾再帰を考慮された関数型
* FUNCTYPE_EVALED_LIST
  - 説明
    - map_evalして作ったリストをargsに渡し、envには現在の環境を渡す
  - 関数宣言
    ScmObj func(ScmObj args, ScmObj env);

* FUNCTYPE_RAW_LIST
  - 説明
    - 評価しない状態の引数のリストをargに渡し、envには現在の環境を渡す
  - 関数宣言
    ScmObj func(ScmObj args, ScmObj env);

* FUNCTYPE_RAW_LIST_TAILREC
  - 説明
    - 評価しない状態の引数のリストをargに渡し、envpには現在の環境へのポインタを渡す
      この型の関数は返り値として生のS式を返し、これによって末尾再帰を実現する
      この関数内で環境が変化した場合は *envp=env; のように新しい環境を
      セットしてからreturnする
  - 関数宣言
    ScmObj func(ScmObj args, ScmObj *envp);

* FUNCTYPE_RAW_LIST_WITH_TAILFLAG
  - 説明
    - 評価しない状態の引数のリストをargに渡し、envpには現在の環境へのポインタを渡す
      さらに、第三引数としてintへのポインタを返す
      この関数の返り値はtail_flagによってかわる
      - (*tail_flag) = 1とセットした場合
        - この型の関数は返り値として生のS式を返し、これによって末尾再帰を実現する
      - (*tail_flag) = 0とセットした場合
        - この型の関数は評価した後の値を返し、末尾再帰は行わない
      この関数内で環境が変化した場合は *envp=env; のように新しい環境を
      セットしてからreturnする
  - 関数宣言
    ScmObj func(ScmObj args, ScmObj *envp, int *tail_flag);


一つ悩んでいる事としては、FUNCTYPE_EVALED_LISTとFUNCTYPE_RAW_LIST第二引数
が ScmObj *envp じゃなくて良いかどうかです。この型の関数で環境をいじるものがあったらどう
しよう...という心配です。まぁ、とりあえず実装してみた方がよいかも。


こんな感じで如何がでしょうか?


# 今日はLLDNに行きます。メッチャ楽しみです。

-------------------------------------------------
Kazuki Ohta : mover****@hct*****
-------------------------------------------------


Anthy-dev メーリングリストの案内
Zurück zum Archiv-Index