遅延評価の差
>OCaml の lazy は、循環参照が存在しないか調べることをやっていて、存在したら Lazy.undefined 例外が発生するようになっている。一方、 Scheme には promise (約束)という遅延評価が存在していて、こちらは循環参照が許されているのみならず、循環参照があったときにどのような処理が行なわれるかということの解説も書かれている。
>
>では、 scheme において (define a (delay (force a))) して、 (force a) するとどうなるか?
>
>手元にそんないっぱいの scheme 実装を入れているわけではないのだが、 Gauche では停止せず、 Bigloo では segmentation fault になってしまった。挙動としてはやはり、停止しないのが正解だと思うが、なにゆえ segmentation fault するのだろうか。
>
>ところで、 Bigloo では promise 以外を force しようとすると型エラーになるようにしているのか。
>