SICP 互換
Structure and Interpretation of Computer Programs (SICP、Harold Abelson と Gerald Jay Sussman による MIT の教科書) が、これらの名前と、 それが書かれた方言である MIT Scheme の出どころです。
R7RS ではありません。 MIT Scheme の true、false、nil(リテラルではなく普通の変数)、
user-initial-environment と system-global-environment(どちらも唯一の大域環境を指す。
evalを参照)、filter、fold-left、1+ などのリストと数値のユーティリティ、
runtime と random、parallel-execute と test-and-set!、そして SICP のストリーム:
cons-stream(構文)とストリーム手続きです。それぞれのページは
SICP 互換の名前にあり、R5RS の scheme-report-environment、
exact->inexact、inexact->exact は (scheme r5rs) にあります。ストリームは '() か、cdr が
プロミスであるペアなので、the-empty-stream は '()、stream-null? は null? です。
これらは (import ...) を
一切書かないプログラムでのみ見える -- 6 ライブラリと同じ扱いだが、どの import もこれらを
名指しできないため、明示的な import リストがあると届かない。
--scheme-standard r7rs ではどこからも見えない。
(#t #f () 4)
(1 3 5)
(((() . 1) . 2) . 3)
parallel-execute はインタプリタと JVM では各サンクをそれぞれのスレッドで実行し、すべてが
終わってから戻ります。サンク内のエラーはそのときに通知されます。WebAssembly にはスレッドが
ないため、サンクは引数の順に一つずつ実行されます。これはスレッド実行でも起こりうる実行順序の
一つで、test-and-set! の上に作ったシリアライザが待たされることはありません。test-and-set!
はどのバックエンドでもアトミックです。
(#f #t)
(only)
プロミスは一度だけ評価され、その値を覚えています。ストリームをたどると各セルは一度だけ評価されます。
(2 3 5 7 11 13 17 19 23 29)
once (42 42)