For Gauche 0.9.5


Next: , Previous: , Up: ライブラリモジュール - R7RS統合   [Contents][Index]

10.4 scheme.base - R7RS基本ライブラリ

Module: scheme.base

R7RSの(scheme base)ライブラリの束縛をエクスポートします。 R7RSプログラムからは、エクスポートされた束縛は(import (scheme base))とすることで 使えます。

Gaucheの組み込み束縛と共通なもの

以下の構文の手続きはGaucheの組み込みのものと同じです。

Primitive expression types
quote if include include-ci lambda
Derived expression types
cond case and or when unless cond-expand let let* letrec letrec*
let-values let*-values begin do make-parameter parameterize
guard quasiquote unquote unquote-splicing case-lambda
Macros
let-synatx letrec-syntax syntax-rules syntax-error define-syntax
Variable definitions
define define-values
Record type definitions
define-record-type
Equivalence predicates
eqv? eq? equal?
Numbers
number? complex? real? rational? integer? exact? exact-integer?
= < > <= >= zero? positive? negative? odd? even? max min + * - / abs
floor/ floor-quotient floor-remainder
truncate/ truncate-quotient truncate-remainder
quotient modulo remainder gcd lcm numerator denominator
floor ceiling truncate round rationalize square exact-integer-sqrt
expt inexact exact number->string string->number
Booleans
not boolean? boolean=?
Pairs and lists
pair? cons car cdr set-car! set-cdr! caar cadr cdar cddr null? list?
make-list list length append reverse list-tail list-ref list-set!
memq memv member assq assv assoc list-copy
Symbols
symbol? symbol=? symbol->string string->symbol
Characters
char? char=? char<? char>? char<=? char>=? char->integer integer->char
Strings
string? make-string string string-length string-ref string-set!
string=? string<? string>? string<=? string>=? substring string-append
string->list list->string string-copy string-copy! string-fill!
Vectors
vector? make-vector vector vector-length vector-ref vector-set!
vector->list list->vector vector->string string->vector
vector-copy vector-copy! vector-append vector-fill!
Control features
procedure? apply map call-with-current-continuation call/cc 
values call-with-values dynamic-wind
Exception
error
Environments and evaluation
scheme-report-environment null-environment
Input and output
input-port? output-port? port? current-input-port current-output-port
current-error-port close-port close-input-port close-output-port
open-input-string open-output-string get-output-string
read-char peek-char read-line eof-object? eof-object char-ready?
newline write-char

バイトベクタユーティリティ

Function: bytevector n …
Function: bytevector? obj
Function: make-bytevector size :optional byte
Function: bytevector-length bv
Function: bytevector-u8-ref bv index
Function: bytevector-u8-set! bv index byte
Function: bytevector-copy bv :optional start end
Function: bytevector-copy! to at from :optional start end
Function: bytevector-append bv …

[R7RS] R7RSのbytevectorはGaucheのu8vectorです。

これらの手続きはgauche.uvectoru8vectoru8vector?make-u8vectoru8vector-lengthu8vector-refu8vector-set!u8vector-copyu8vector-copy!u8vector-appendとそれぞれ同じです。 (ユニフォームベクタ参照)。

以下の二つの手続きはgauche.unicodeモジュールの同名の手続きと同じです。 (Unicode transfer encodings参照):

utf8->string string->utf8

制御機能

Function: string-map proc str …
Function: string-for-each proc str …

[R7RS] これらの手続きはSRFI-13のstring-map及びstring-for-each (文字列のマッピング参照)とは異なる引数を取るので、 混乱を避けるためscheme.baseでのみ提供されます。

但し、文字列引数をひとつだけ渡す場合は、 srfi-13でもscheme.baseでも全く同様に動作します。

Function: raise obj
Function: raise-continuable obj

[R7RS] Gaucheのraiseは、obj<serious-condition>でなければ、 例外ハンドラから戻って来ることを許しています。 継続可能な例外報告と継続不可能な例外報告を手続きで区別するのは、 例外ハンドラが渡されたコンディションを再び投げる場合に問題となります (元のコンディションがraiseで投げられたのかraise-continuableで 投げられたのか知る術がない!)。 しかしR7RSではそのモデルを採用したため、何とか合わせようとしています。

R7RS版のraiseはGaucheのraiseのラッパーで、 Gaucheのraiseから戻って来たらエラーを投げるようにしています。

R7RSのraise-continuableは今のところGaucheのraiseの 別名になっています。<serious-condition>を渡さなければ、 戻ってくることが可能です。R7RS準拠でないのは、 <serious-condition>かそのサブクラスのオブジェクト(例えば<error>)を raise-continuableに渡した場合ですが、 <error>を投げて戻って来ることを期待するというのはちょっとおかしいですよね。

Function: error-object? exc

[R7RS] (condition-has-type? exc <error>))として定義されています。

Function: error-object-message exc

[R7RS] exc<message-condition>であれば message-prefixの内容を、持っていなければ空文字列を返します。

Function: error-object-irritants exc

[R7RS] exc<message-condition>であれば message-argsの内容を、持っていなければ空文字列を返します。

Function: read-error? exc

[R7RS] (condition-has-type? e <read-error>))として定義されています。

Function: file-error? exc

[R7RS] 今のところ、Gaucheは独立した<file-error>コンディションを持っていませんが、 ファイルエラーのほとんどは<system-error>として投げられます。 この手続きは<system-error>のエラーコードを調べ、ファイルに起因するエラー の場合に#tを返すようにしています。

入出力

Function: textual-port? port
Function: binary-port? port

[R7RS] Gaucheのポートはどちらも扱えるので、これらの手続きはport?と等価です。

Function: input-port-open? iport
Function: output-port-open? oport

[R7RS] iport/oportがそれぞれ入力/出力ポートであり、かつクローズされていなければ #tを返します。

Function: open-input-bytevector u8vector
Function: open-output-bytevector
Function: get-output-bytevector port

[R7RS] これらは基本的にgauche.vportopen-input-uvectoropen-output-uvectorget-output-uvector とそれぞれ同じです(仮想ポート参照)。 但しR7RS版は<u8vector>しか受け付けません。

Function: read-u8 :optional iport
Function: peek-u8 :optional iport
Function: u8-ready? :optional iport

[R7RS] それぞれread-bytepeek-bytebyte-ready?と 同じです。

Function: read-bytevector size :optional iport

[R7RS] (read-uvector <u8vector> size iport)と等価です。 See ユニフォームベクタのブロック入出力.

Function: read-bytevector! bv :optional iport start end

[R7RS] read-uvector!の別名です。ユニフォームベクタのブロック入出力参照。

Function: write-string string :optional oport start end

[R7RS] startend引数が省略された場合は(display string oport)と 同じです。それらが与えられた場合は、string中の指定範囲のみが出力されます。

Function: write-u8

[R7RS] write-byteの別名です。

Function: write-bytevector bv :optional oport start end

[R7RS] write-uvectorと同じです。ユニフォームベクタのブロック入出力参照。

Function: flush-output-port :optional oport

[R7RS] flushの別名です。

Function: features

[R7RS] サポートされているfeature-identifierのリストを返します。 feature-identifierについては、cond-expandを参照してください (機能条件式参照)。


Next: , Previous: , Up: ライブラリモジュール - R7RS統合   [Contents][Index]