NScLisper機能一覧
データ型
スペシャルフォーム
- define (関数定義のsyntax sugarあり)
- cond
- if
- quote (引用符'のsyntax sugarあり)
- let (名前付きletなし)
- begin
- lambda
- and
- or
- set!
関数
- car
- cdr
- cons
- eq? (数値比較も行うのでeqvを兼ねる)
- atom?
- +
- - (2引数のみ)
- *
- / (2引数のみ)
- mod
- >
- >=
- <
- <=
- set-car!
- set-cdr!
- boolean?
- pair?
- number?
- symbol?
- procedure?
- null?
- caar
- cadr
- cdar
- addr
- list
- length
- list-ref
- list-tail
- append
- list?
- assq
- assoc
- map
- memq
- member
- not
- equal?
メモリ管理
Mark Sweep GCが実装されています。
また、シンボル(の含む文字列)は Copying GCで回収します。
末尾再帰/呼び出しの最適化が中途半端にされています。
末尾呼出を続けていればメモリを使い切ることはありませんが、
新しくセルを消費するので、GCを引き起こす要因となります。
末尾再帰でない関数の再帰呼び出しなどで
スタックを一定以上消費すると評価は中断され、結果はエラー扱いとなります。
無限ループに関する注意
フリーモード以外では、1つの式の評価に対し、一定回数以上部分式の評価が行われるたびに、
評価を中断するかどうか尋ねます。評価を中断した場合、結果はエラー扱いとなります。
フリーモードでは、無限ループに陥ったときはプロセスを強制終了させてください。