(rontolisp) docs

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)