nptのドキュメントです。
参照元:ANSI Common Lisp npt
lisp.h
に記載されている下記の関数仕様を示します。
■シーケンス生成void lisp_cons(addr x, addr car, addr cdr);
void lisp_vector(addr x, size_t size);
void lisp_list(addr x, ...);
void lisp_lista(addr x, ...);
■シーケンス操作int lisp_getelt_(addr x, addr pos, size_t index);
int lisp_setelt_(addr pos, size_t index, addr value);
int lisp_length_(addr pos, size_t *ret);
int lisp_reverse_(addr x, addr pos);
int lisp_nreverse_(addr x, addr pos);
■consvoid lisp_car(addr x, addr list);
void lisp_cdr(addr x, addr list);
void lisp_carcdr(addr x, addr y, addr list);
void lisp_setf_car(addr cons, addr value);
void lisp_setf_cdr(addr cons, addr value);
void lisp_setf_carcdr(addr cons, addr car, addr cdr);
■stringint lisp_string8_(addr x, const void *str);
int lisp_string16_(addr x, const void *str);
int lisp_string32_(addr x, const void *str);
int lisp_string_getc_(addr pos, size_t i, unicode *c);
■strvectint lisp_strvect_getc(addr pos, size_t i, unicode *c);
int lisp_strvect_length(addr pos, size_t *ret);
シーケンスオブジェクトの生成関数です。
void lisp_cons(addr x, addr car, addr cdr);
void lisp_vector(addr x, size_t size);
void lisp_list(addr x, ...);
void lisp_lista(addr x, ...);
lisp_cons
void lisp_cons(addr x, addr car, addr cdr);
: car, cdr オブジェクト
入力: x hold変数 出力
consオブジェクトを生成します。
car
がNULL
の場合はNIL
が指定されます。
cdr
がNULL
の場合はNIL
が指定されます。
car
がhold変数の場合は、内容が指定されます。
cdr
がhold変数の場合は、内容が指定されます。
lisp_vector
void lisp_vector(addr x, size_t size);
: size 配列の長さ
入力: x hold変数 出力
一次元の配列オブジェクトを生成します。
simple-vector
型の専用オブジェクトです。
lisp_list
void lisp_list(addr x, ...);
: 可変引数
入力: x hold変数 出力
可変引数を要素にしたlistオブジェクトを生成します。
可変引数はaddrを受け取り、NULLで終端します。
引数がhold変数の場合は、内容を使用します。
例をあげます。
(x, 10);
lisp_fixnum(y, 20);
lisp_fixnum(z, 30);
lisp_fixnum(x, x, y, z, NULL);
lisp_list
-> (10 20 30) x
lisp_lista
void lisp_lista(addr x, ...);
: 可変引数
入力: x hold変数 出力
可変引数を要素にしたlistオブジェクトを生成します。
Common Lispのlist*
とほぼ同等であり、最終要素がリストのcdrになります。
可変引数はaddrを受け取り、NULLで終端します。
list*
とは違い、要素が一つもない場合はNIL
を返却します。
引数がhold変数の場合は、内容を使用します。
例をあげます。
(x, 10);
lisp_fixnum(y, 20);
lisp_fixnum(z, 30);
lisp_fixnum(x, x, y, z, NULL);
lisp_lista
-> (10 20 . 30) x
シーケンスの操作関数です。
int lisp_getelt_(addr x, addr pos, size_t index);
int lisp_setelt_(addr pos, size_t index, addr value);
int lisp_length_(addr pos, size_t *ret);
int lisp_reverse_(addr x, addr pos);
int lisp_nreverse_(addr x, addr pos);
lisp_getelt_
int lisp_getelt_(addr x, addr pos, size_t index);
: pos シーケンス
入力: index インデックス
入力: x hold変数
出力: 脱出時は0以外 戻り値
シーケンスpos
のindex
番目の要素を返却します。
pos
がhold変数の場合は、内容が使用されます。
lisp_setelt_
int lisp_setelt_(addr pos, size_t index, addr value);
: pos シーケンス
入力: index インデックス
入力: x hold変数
出力: 脱出時は0以外 戻り値
シーケンスpos
のindex
番目の要素をvalue
に設定します。
pos
, value
がhold変数の場合は、内容が使用されます。
lisp_length_
int lisp_length_(addr pos, size_t *ret);
: pos シーケンス
入力: ret 要素数
出力: 脱出時は0以外 戻り値
シーケンスpos
の要素数を返却します。
pos
がhold変数の場合は、内容が使用されます。
lisp_reverse_
int lisp_reverse_(addr x, addr pos);
: pos シーケンス
入力: x hold変数
出力: 脱出時に0以外 戻り値
pos
を逆順にしたものを返却します。
pos
がhold変数の場合は、内容が使用されます。
シーケンスは新たに作成されるので、元のシーケンスは破壊しません。
lisp_nreverse_
int lisp_nreverse_(addr x, addr pos);
: pos シーケンス
入力: x hold変数
出力: 脱出時に0以外 戻り値
pos
を逆順にしたものを返却します。
pos
がhold変数の場合は、内容が使用されます。
シーケンスを新たに作成せず、シーケンスを破壊します。
consのアクセス関数です。
void lisp_car(addr x, addr list);
void lisp_cdr(addr x, addr list);
void lisp_carcdr(addr x, addr y, addr list);
void lisp_setf_car(addr cons, addr value);
void lisp_setf_cdr(addr cons, addr value);
void lisp_setf_carcdr(addr cons, addr car, addr cdr);
lisp_car
void lisp_car(addr x, addr list);
: list リスト
入力: x hold変数 出力
list
のcarを取得します。
list
はconsかNILを指定できます。
lisp_cdr
void lisp_cdr(addr x, addr list);
: list リスト
入力: x hold変数 出力
list
のcdrを取得します。
list
はconsかNILを指定できます。
lisp_carcdr
void lisp_carcdr(addr x, addr y, addr list);
: `list` リスト
入力: x, y hold変数 出力
list
のcarをx
に、cdrをy
に返却します。 list
はconsかNILを指定できます。
lisp_setf_car
void lisp_setf_car(addr cons, addr value);
: cons cons型
入力: value オブジェクト 入力
value
がhold変数の場合は、内容が使用されます。
cons
のcar部にvalue
を設定します。
lisp_setf_cdr
void lisp_setf_cdr(addr cons, addr value);
: cons cons型
入力: value オブジェクト 入力
value
がhold変数の場合は、内容が使用されます。
cons
のcdr部にvalue
を設定します。
lisp_setf_carcdr
void lisp_setf_carcdr(addr cons, addr car, addr cdr);
: cons cons型
入力: car, cdr オブジェクト 入力
car
, cdr
がhold変数の場合は、内容が使用されます。
cons
のcar部にcar
を設定します。
cons
のcdr部にcdr
を設定します。
stringのアクセス関数です。
int lisp_string8_(addr x, const void *str);
int lisp_string16_(addr x, const void *str);
int lisp_string32_(addr x, const void *str);
int lisp_string_getc_(addr pos, size_t i, unicode *c);
lisp_string8_
int lisp_string8_(addr x, const void *str);
int lisp_string16_(addr x, const void *str);
int lisp_string32_(addr x, const void *str);
: str 文字列
入力: x hold変数
出力: 脱出時は0以外 戻り値
stringオブジェクトを返却します。
simple-string
型の専用オブジェクトです。
str
はオブジェクトに格納する文字列を指定します。
str
のメモリ形式は下記の通りです。
lisp_string16_
lisp_string8_
で解説
lisp_string32_
lisp_string8_
で解説
lisp_string_getc_
int lisp_string_getc_(addr pos, size_t i, unicode *c);
: pos 文字列
入力: i インデックス
入力: c 文字
出力: 脱出時は0以外 戻り値
strvect
オブジェクトから文字の値を取得します。
pos
がhold変数の場合は、内容を使用します。
simple-string
専用のオブジェクトである、strvect
の操作関数です。
int lisp_strvect_getc(addr pos, size_t i, unicode *c);
int lisp_strvect_length(addr pos, size_t *ret);
lisp_strvect_getc
int lisp_strvect_getc(addr pos, size_t i, unicode *c);
: pos オブジェクト
入力: i インデックス
入力: c 文字
出力: 正常終了は0、エラーは0以外 戻り値
strvect
オブジェクトから文字の値を取得します。
本関数は脱出なしで文字列から文字を取得するための関数です。
lisp_string_getc_
と違いarray
オブジェクトには対応していません。
もしstrvect
型オブジェクトではない場合は戻り値-1
で終了します。
もしi
が文字数を超えていた場合は、戻り値1
で終了します。
文字をc
に返却したら、戻り値0
で終了します。
lisp_strvect_length
int lisp_strvect_length(addr pos, size_t *ret);
: pos オブジェクト
入力: ret 文字列の長さ
出力: 正常終了は0、エラーは0以外 戻り値
strvect
オブジェクトから文字列の長さを取得します。
本関数は脱出なしで文字列から長さを取得するための関数です。
lisp_length_
と違いstrvect
オブジェクトのみに対応しています。
もしstrvect
型オブジェクトではない場合は戻り値-1
で終了します。
文字列の長さをret
に返却したら、戻り値0
で終了します。