nptのドキュメントです。
参照元:ANSI Common Lisp npt
lisp.h
に記載されている下記の関数仕様を示します。
■functionvoid lisp_get_function(addr x, addr symbol);
void lisp_get_setf(addr x, addr symbol);
int lisp_get_function_(addr x, addr value);
int lisp_get_function8_(addr x, const void *str);
int lisp_get_function16_(addr x, const void *str);
int lisp_get_function32_(addr x, const void *str);
int lisp_get_setf_(addr x, addr value);
int lisp_get_setf8_(addr x, const void *str);
int lisp_get_setf16_(addr x, const void *str);
int lisp_get_setf32_(addr x, const void *str);
-function
■compiledvoid lisp_compiled_dynamic(int index, lisp_calltype_dynamic call);
void lisp_compiled_rest(int index, lisp_calltype_rest call);
void lisp_compiled_empty(int index, lisp_calltype_empty call);
void lisp_compiled_var1(int index, lisp_calltype_var1 call);
void lisp_compiled_var2(int index, lisp_calltype_var2 call);
void lisp_compiled_var3(int index, lisp_calltype_var3 call);
int lisp_compiled_function_(addr x, int index, addr symbol);
int lisp_compiled_function8_(addr x, int index, const void *str);
int lisp_compiled_function16_(addr x, int index, const void *str);
int lisp_compiled_function32_(addr x, int index, const void *str);
int lisp_compiled_defun_(int index, addr symbol);
int lisp_compiled_defun8_(int index, const void *str);
int lisp_compiled_defun16_(int index, const void *str);
int lisp_compiled_defun32_(int index, const void *str);
int lisp_compiled_defun_setf_(int index, addr symbol);
int lisp_compiled_defun_setf8_(int index, const void *str);
int lisp_compiled_defun_setf16_(int index, const void *str);
int lisp_compiled_defun_setf32_(int index, const void *str);
void lisp_compiled_setvalue(addr pos, addr value);
void lisp_compiled_getvalue(addr *ret);
symbolから関数オブジェクトを取得する関数です。
void lisp_get_function(addr x, addr symbol);
void lisp_get_setf(addr x, addr symbol);
int lisp_get_function_(addr x, addr value);
int lisp_get_function8_(addr x, const void *str);
int lisp_get_function16_(addr x, const void *str);
int lisp_get_function32_(addr x, const void *str);
int lisp_get_setf_(addr x, addr value);
int lisp_get_setf8_(addr x, const void *str);
int lisp_get_setf16_(addr x, const void *str);
int lisp_get_setf32_(addr x, const void *str);
lisp_get_function
void lisp_get_function(addr x, addr symbol);
: symbol symbol型オブジェクト
入力: x hold変数 出力
symbolから関数オブジェクトを取得します。
Common Lispのsymbol-function
と同じです。
value
がhold変数の場合は、内容を使用します。
関数がunbound
の場合はNULL
が返却されます。
引数がsymbol型ではない場合はLISP ABORT
します。
lisp_get_setf
void lisp_get_setf(addr x, addr symbol);
: symbol symbol型オブジェクト
入力: x hold変数 出力
symbolからsetf
の関数オブジェクトを取得します。
Common Lispの(fdefinition (list 'setf symbol))
と同じです。
value
がhold変数の場合は、内容を使用します。
関数がunbound
の場合はNULL
が返却されます。
引数がsymbol型ではない場合はLISP ABORT
します。
lisp_get_function_
int lisp_get_function_(addr x, addr value);
: value オブジェクト
入力: x hold変数
出力: 脱出時は0以外 戻り値
value
がsymbolの場合は関数を取得します。
value
がfunction型の場合は値をそのまま返却します。
value
がhold変数の場合は、内容を使用します。
関数がunbound
の場合はNULL
が返却されます。
lisp_get_function8_
int lisp_get_function8_(addr x, const void *str);
int lisp_get_function16_(addr x, const void *str);
int lisp_get_function32_(addr x, const void *str);
: str Unicode文字列
入力: x hold変数
出力: 脱出時は0以外 戻り値
str
をsymbol名として関数を取得します。
関数がunbound
の場合はNULL
が返却されます。
Unicode文字列の詳細はlisp_string8_
関数をご確認ください。
lisp_get_function16_
lisp_get_function8_
で解説
lisp_get_function32_
lisp_get_function8_
で解説
lisp_get_setf_
int lisp_get_setf_(addr x, addr value);
: value オブジェクト
入力: x hold変数
出力: 脱出時は0以外 戻り値
value
がsymbolの場合はsetf
関数を取得します。
value
がfunction型の場合は値をそのまま返却します。
value
がhold変数の場合は、内容を使用します。
関数がunbound
の場合はNULL
が返却されます。
lisp_get_setf8_
int lisp_get_setf8_(addr x, const void *str);
int lisp_get_setf16_(addr x, const void *str);
int lisp_get_setf32_(addr x, const void *str);
: str Unicode文字列
入力: x hold変数
出力: 脱出時は0以外 戻り値
str
をsymbol名としてsetf
関数を取得します。
関数がunbound
の場合はNULL
が返却されます。
Unicode文字列の詳細はlisp_string8_
関数をご確認ください。
lisp_get_setf16_
lisp_get_setf8_
で解説
lisp_get_setf32_
lisp_get_setf8_
で解説
関数作成のための関数です。
void lisp_compiled_dynamic(int index, lisp_calltype_dynamic call);
void lisp_compiled_rest(int index, lisp_calltype_rest call);
void lisp_compiled_empty(int index, lisp_calltype_empty call);
void lisp_compiled_var1(int index, lisp_calltype_var1 call);
void lisp_compiled_var2(int index, lisp_calltype_var2 call);
void lisp_compiled_var3(int index, lisp_calltype_var3 call);
int lisp_compiled_function_(addr x, int index, addr symbol);
int lisp_compiled_function8_(addr x, int index, const void *str);
int lisp_compiled_function16_(addr x, int index, const void *str);
int lisp_compiled_function32_(addr x, int index, const void *str);
int lisp_compiled_defun_(int index, addr symbol);
int lisp_compiled_defun8_(int index, const void *str);
int lisp_compiled_defun16_(int index, const void *str);
int lisp_compiled_defun32_(int index, const void *str);
int lisp_compiled_defun_setf_(int index, addr symbol);
int lisp_compiled_defun_setf8_(int index, const void *str);
int lisp_compiled_defun_setf16_(int index, const void *str);
int lisp_compiled_defun_setf32_(int index, const void *str);
void lisp_compiled_setvalue(addr pos, addr value);
void lisp_compiled_getvalue(addr *ret);
lisp_compiled_dynamic
void lisp_compiled_dynamic(int index, lisp_calltype_dynamic call);
: index 関数番号
入力: call 関数ポインタ int (*call)(addr) 入力
関数ポインタcall
をindex
番目に登録します。
index
は0~31までの値であり、 上限値31はdefine値LISP_POINTER_EXTEND
で設定できます。
Lispから呼び出されると、引数を&rest
指定のようにリストとして第1引数に渡してます。
rest
と違い、リストはdynamic-extent
で確保されるため、 関数の返却値には設定できません。
下記の宣言のような関数が作成されます。
defun name (&rest args)
(declare (dynamic-extent args)
( ...)
lisp_compiled_rest
void lisp_compiled_rest(int index, lisp_calltype_rest call);
: index 関数番号
入力: call 関数ポインタ int (*call)(addr) 入力
関数ポインタcall
をindex
番目に登録します。
index
は0~31までの値であり、 上限値31はdefine値LISP_POINTER_EXTEND
で設定できます。
Lispから呼び出されると、引数を&rest
指定のようにリストとして第1引数に渡してます。
dynamic
と違い、リストはheap領域に確保されるため、関数の返却値に設定できます。
下記の宣言のような関数が作成されます。
defun name (&rest args)
( ...)
lisp_compiled_empty
void lisp_compiled_empty(int index, lisp_calltype_empty call);
: index 関数番号
入力: call 関数ポインタ int (*call)(void) 入力
関数ポインタcall
をindex
番目に登録します。
index
は0~31までの値であり、 上限値31はdefine値LISP_POINTER_EXTEND
で設定できます。
Lispからは引数無しで呼び出されます。
引数がある場合はエラーです。
下記の宣言のような関数が作成されます。
defun name ()
( ...)
lisp_compiled_var1
void lisp_compiled_var1(int index, lisp_calltype_var1 call);
: index 関数番号
入力: call 関数ポインタ int (*call)(addr) 入力
関数ポインタcall
をindex
番目に登録します。
index
は0~31までの値であり、 上限値31はdefine値LISP_POINTER_EXTEND
で設定できます。
Lispからは引数1つで呼び出されます。
引数が1つではない場合はエラーです。
下記の宣言のような関数が作成されます。
defun name (x)
( ...)
lisp_compiled_var2
void lisp_compiled_var2(int index, lisp_calltype_var2 call);
: index 関数番号
入力: call 関数ポインタ int (*call)(addr, addr) 入力
関数ポインタcall
をindex
番目に登録します。
index
は0~31までの値であり、 上限値31はdefine値LISP_POINTER_EXTEND
で設定できます。
Lispからは引数2つで呼び出されます。
引数が2つではない場合はエラーです。
下記の宣言のような関数が作成されます。
defun name (x y)
( ...)
lisp_compiled_var3
void lisp_compiled_var3(int index, lisp_calltype_var3 call);
: index 関数番号
入力: call 関数ポインタ int (*call)(addr, addr, addr) 入力
関数ポインタcall
をindex
番目に登録します。
index
は0~31までの値であり、 上限値31はdefine値LISP_POINTER_EXTEND
で設定できます。
Lispからは引数3つで呼び出されます。
引数が3つではない場合はエラーです。
下記の宣言のような関数が作成されます。
defun name (x y z)
( ...)
lisp_compiled_function_
int lisp_compiled_function_(addr x, int index, addr symbol);
: index 関数番号
入力: symbol symbolオブジェクトかNULL
入力: 脱出時は0以外 戻り値
関数オブジェクトを生成します。
関数内部で保有する名前はsymbol
に指定します。
symbol
がNULLの場合はNIL
がを使用します。
symbol
がhold変数の場合は、内容を使用します。
オブジェクトが呼び出されると、関数番号に登録した関数ポインタが実行されます。
lisp_compiled_function8_
int lisp_compiled_function8_(addr x, int index, const void *str);
int lisp_compiled_function16_(addr x, int index, const void *str);
int lisp_compiled_function32_(addr x, int index, const void *str);
: index 関数番号
入力: str Unicode文字列
入力: 脱出時は0以外 戻り値
関数オブジェクトを生成します。
関数内部で保有する名前はstr
に指定します。
オブジェクトが呼び出されると、関数番号に登録した関数ポインタが実行されます。
Unicode文字列の詳細はlisp_string8_
関数をご確認ください。
lisp_compiled_function16_
lisp_compiled_function8_
で解説
lisp_compiled_function32_
lisp_compiled_function8_
で解説
lisp_compiled_defun_
int lisp_compiled_defun_(int index, addr symbol);
: index 関数番号
入力: symbol symbolオブジェクト
入力: 脱出時は0以外 戻り値
関数を登録します。
オブジェクトを生成してsymbol-function
に登録します。
symbol
がhold変数の場合は、内容を使用します。
生成された関数が呼び出されると、関数番号に登録した関数ポインタが実行されます。
lisp_compiled_defun8_
int lisp_compiled_defun8_(int index, const void *str);
int lisp_compiled_defun16_(int index, const void *str);
int lisp_compiled_defun32_(int index, const void *str);
: index 関数番号
入力: str Unicode文字列
入力: 脱出時は0以外 戻り値
関数を登録します。
オブジェクトを生成してsymbol-function
に登録します。
生成された関数が呼び出されると、関数番号に登録した関数ポインタが実行されます。
Unicode文字列の詳細はlisp_string8_
関数をご確認ください。
lisp_compiled_defun16_
lisp_compiled_defun8_
で解説
lisp_compiled_defun32_
lisp_compiled_defun8_
で解説
lisp_compiled_defun_setf_
int lisp_compiled_defun_setf_(int index, addr symbol);
: index 関数番号
入力: symbol symbolオブジェクト
入力: 脱出時は0以外 戻り値
symbol
のsetf
関数を登録します。
symbol
がhold変数の場合は、内容を使用します。
生成された関数が呼び出されると、関数番号に登録した関数ポインタが実行されます。
lisp_compiled_defun_setf8_
int lisp_compiled_defun_setf8_(int index, const void *str);
int lisp_compiled_defun_setf16_(int index, const void *str);
int lisp_compiled_defun_setf32_(int index, const void *str);
: index 関数番号
入力: str Unicode文字列
入力: 脱出時は0以外 戻り値
symbol
のsetf
関数を登録します。
生成された関数が呼び出されると、関数番号に登録した関数ポインタが実行されます。
Unicode文字列の詳細はlisp_string8_
関数をご確認ください。
lisp_compiled_defun_setf16_
lisp_compiled_defun_setf8_
で解説
lisp_compiled_defun_setf32_
lisp_compiled_defun_setf8_
で解説
lisp_compiled_getvalue
void lisp_compiled_getvalue(addr *ret);
: ret オブジェクト返却 出力
クロージャーから値を取得します。
値はスタックフレームから取得しますので、 取得前にlisp_push_control
を使用しないでください。
lisp_compiled_setvalue
void lisp_compiled_setvalue(addr pos, addr value);
: pos 関数オブジェクト
入力: value オブジェクトかNULL 入力
関数オブジェクトのクロージャーに値を設定します。
value
がNULLの場合はNIL
が使用されます。
value
がhold変数の場合は、内容が使用されます。