ライブラリ
ファイルが import できる 12 の R7RS ライブラリと、それぞれが提供するものです。
名前ごとのページはリファレンスにあります。(import ...) で始まるファイル
(構文参照)は、名指ししたライブラリだけを見ます。import を一切書かない
ファイルは、12 すべてに加えて
Structure and Interpretation of Computer Programs(SICP)互換の名前も見えます。
| ライブラリ | 提供するもの |
|---|---|
| (scheme base) | 中核部分: 数値、真偽値、ペアとリスト、シンボル、文字、文字列、ベクタ、バイトベクタ、制御、例外、ポート(文字列ポート、バイトベクタポート、現在のポート)、入出力。構文は構文にあります |
| (scheme write) | display と write |
| (scheme read) | read |
| (scheme char) | Unicode に基づく文字の分類、大文字・小文字の変換、大文字と小文字を区別しない比較 |
| (scheme inexact) | 超越関数と浮動小数点数の述語 |
| (scheme cxr) | 3 段と 4 段の car/cdr の合成 |
| (scheme lazy) | プロミス |
| (scheme case-lambda) | case-lambda |
| (scheme process-context) | exit と emergency-exit のみ |
| (scheme eval) | eval と environment。eval を参照 |
| (scheme repl) | interaction-environment |
| (scheme file) | ファイルポート、file-exists?、delete-file |
入出力の手続きはどれも省略可能なポート引数を取り、省くと現在のポートを使います。現在の
ポートはパラメータオブジェクトなので、parameterize で差し替えられます。ファイルポートはファイル名を指定して
開きます。(scheme file) を参照してください。
"captured (1 \"two\")"
((a b) 42 #t)
500000500000
4
3
表示
write と display は循環するリストやベクタをデータラベル付きで
#0=(a b c . #0#) のように書きます。循環のない共有構造は出現のたびに書き出します。
正確な引数に正確な答えがあれば結果も正確なままです。浮動小数点数は 1e21 未満では
位取り表記で、それ以上(および 1e-6 未満)では指数付きで表示されます:
(4 1/2 1.4142135623730951 1 0)
(123456789.123 1e21 0.000001 1.5e-7 +inf.0)
自分のライブラリ
プログラムは define-library でライブラリに分けられます:
ファイルの先頭、その import より前に書くか、専用のファイルに置けば
(import (shapes circle)) がプログラムと同じ場所の shapes/circle.sld として見つけます。
ライブラリの名前は、エクスポートしない限りライブラリの中に閉じます。
include はファイルの内容をその位置に置きます。どちらもプログラムと
同時に読まれるので、コンパイルしたプログラムは実行時にそれらのファイルを必要としません。
; file: shapes/circle.sld
(define-library (shapes circle)
(export area)
(import (scheme base))
(begin
(define pi 314/100)
(define (area r) (* pi r r))))
(314 3)
機能
cond-expand は、処理系の機能と 処理系にあるライブラリによって、プログラムを読む時点でコードを選びます: 複数の Scheme 処理系向けに書いたプログラムがここで動き、選ばれなかった分岐はコンパイルされません。
rontolisp