nptのドキュメントです。
参照元:ANSI Common Lisp npt
npt-systemパッケージの下記の関数を説明します。
defun gc
defun savecore
defun loadcore
defun exit
defun quitdefun specialp
defun array-general-p
defun array-specialized-p
defun closp
defun fixnump
defun bignump
defun ratiop
defun short-float-p
defun single-float-p
defun double-float-p
defun long-float-p
defun callnamepdefun make-character
defun make-fixnum
defun make-bignum
defun make-ratio
defun make-complex
defun make-callnamedefun subtypep!
defun parse-type
defun type-objectdefun make-memory-input-stream
defun make-memory-output-stream
defun make-memory-io-stream
defmacro with-input-from-memory
defmacro with-output-to-memory
defun get-output-stream-memory
defun memory-stream-p
defun (setf memory-stream-p)defun simple-sort
defun bubble-sort
defun quick-sort
defun merge-sortdefun make-paper
defun info-paper
defun array-paper
defun body-paperdefun package-export-list
defun large-number
defun equal-random-state
defun remove-file
defun remove-directory
defun byte-integer
defun fpclassify
defun eastasian-set
defun eastasian-get
defun eastasian-widthnpt-systemパッケージに存在する、システム関数の関数仕様を示します。
defun gc
defun savecore
defun exit
defun quitgcガベージコレクタを起動します。
(defun gc (&key full) ...) -> null
入力: full general-boolean
出力: null nil固定本関数は、ガベージコレクタの依頼を行います。
関数内でガベージコレクタが実行されるのではなく、 処理系の都合の良いタイミングで実施されます。
現時点では引数:fullは無視されます。
ガベージコレクタの実行はroom関数で確認できます。
* (room)
・・・
GC count: 1 [times]
・・・
NIL
* (npt-system:gc)
NIL
* (room)
・・・
GC count: 2 [times]
・・・
NIL
*savecoreLispを終了させてから、コアファイルを作成します。
(defun savecore (output &key input (exit t)) ...) -> null
入力: output, pathname-designer, 出力コアファイル
入力: input, pathname-designer, 入力コアファイル
入力: exit, T ;; General boolean
出力: null 戻り値無しコアファイルとは、メモリイメージを出力したファイルです。
npt起動時に--core引数および--corefile引数を指定すると、 コアファイルを読み込めます。
savecore関数はsavecore conditionを実行してLispを終了させます。
途中でhandlerを捕捉することができます。
本関数が正常に動作した場合はLispが終了するので、 通常はプロセス自体が終了します。
モジュールとして使用している場合は、C言語のlisp_argv_run関数から制御が戻ります。
ただし、引数inputとexitの内容によっては、 コアファイルを出力した後にLispに復帰します。
引数inputが指定された場合は、 コアファイル生成後にinputのコアファイルを読み込みます。
また、引数inputが指定されておらず、かつexitがnilの場合は、 コアファイル生成後にLispを再起動します。
$ npt
* (defvar *hello* 1234)
*HELLO*
* *hello*
1234
* (npt-system:savecore #p"hello-core-image.core")
Core file: hello-core-image.core
$ ls
hello-core-image.core
$ npt --core --corefile hello-core-image.core
* *hello*
1234
*loadcoreLispを終了させてから、コアファイルを作成します。
(defun loadcore (input &key output (exit t)) ...) -> null
入力: input, pathname-designer, 入力コアファイル
入力: output, pathname-designer, 出力コアファイル
入力: exit, T ;; General boolean
出力: null 戻り値無しloadcore関数は、savecore関数とほぼ同じです。
次のような動作をします。
(defun loadcore (input &key output (exit t))
(savecore output :input input :exit exit))本関数の意味はコアファイルを読み込むことですが、 savecoreと同様必ずLispが終了します。
exitquitLispを終了します。
(defun exit (&optional code) ...) -> なし
(defun quit (&optional code) ...) -> なし
入力: code 終了コード、省略時は0exitとquitは同じです。
本関数はLispを終了させますので、式の返却値はありません。
引数の終了コードは、通常はプロセスの終了コードに設定されます。
モジュールとして使用している場合は、C言語のlisp_argv_run関数から制御が戻ります。
返却値はlisp_result変数で確認できます。
exit/quitはexit conditionを実行してLispを終了させます。
途中でhandlerを捕捉することができます。
exitとquitのsymbolは、common-lisp-userパッケージに importされた状態で始まります。
$ npt
* (quit)
$ echo $?
0
$ npt --eval '(exit 22)'
$ echo $?
22
$npt-systemパッケージに存在する、オブジェクト確認の関数仕様を示します。
defun specialp
defun array-general-p
defun array-specialized-p
defun closp
defun fixnump
defun bignump
defun ratiop
defun short-float-p
defun single-float-p
defun double-float-p
defun long-float-p
defun callnamepspecialpグローバル変数がspecialかどうかを調査します。
(defun specialp (symbol) ...) -> boolean
入力: symbol
出力: booleanレキシカルの状況を考慮せず、変数がspecialかどうかを返却します。
つまり変数がdefvar, defparameter, declaim, proclaimの実行により special変数になった場合にtとなります。
* (specialp 'aaa)
NIL
* (defvar bbb)
BBB
* (specialp 'bbb)
T
* (let (ccc) (declare (special ccc)) (specialp 'ccc))
NILarray-general-p引数がgeneral arrayかどうかを調べます。
(defun array-general-p (object) ...) -> boolean
入力: object
出力: boolean入力がarrayオブジェクトであり、かつgeneral arrayの場合はtを返却します。
typepとは違い、npt内部のオブジェクト種別によって判定が変わります。
入力がmake-arrayによって生成され、 かつelement-typeがtのオブジェクトの場合に限りtが返却されます。
例えば#(10 20 30)は、vectorオブジェクトのため、tにはなりません。
* (array-general-p (make-array 10))
T
* (array-general-p #(10 20 30))
NIL
* (typep (make-array 10) '(array t))
T
* (typep #(10 20 30) '(array t))
Tarray-specialized-p引数がspecialized arrayかどうかを調べます。
(defun array-specialized-p (object) ...) -> boolean
入力: object
出力: boolean入力がarrayオブジェクトであり、 かつelement-typeがt以外の場合はtが返却されます。
closp引数がclosオブジェクトかどうかを調べます。
(defun closp (object) ...) -> boolean
入力: object
出力: boolean入力がclosオブジェクトの場合はtが返却されます。
Common Lispでは、全てのCLOSオブジェクトが standard-objectに属しているため、 通常であれば次の命令と一致するはずです。
(typep 入力 'standard-object)fixnump引数がfixnumオブジェクトかどうかを調べます。
(defun fixnump (object) ...) -> boolean
入力: object
出力: boolean入力がfixnumオブジェクトの場合はtが返却されます。
通常であれば、fixnum型に属するintegerは 全てfixnumオブジェクトであるはずです。
しかし開発においては、例えばbignum型であるにもかかわらず、 10や20と言った小さなintegerも作成できます。
本関数は上記の差異を調査するためのものです。
* 10
10
* (fixnump 10)
T
* (make-bignum 20)
20
* (fixnump (make-bignum 20))
NILbignump引数がbignumオブジェクトかどうかを調べます。
(defun bignump (object) ...) -> boolean
入力: object
出力: boolean入力がbignumオブジェクトの場合はtが返却されます。
* 10
10
* (bignump 10)
NIL
* (make-bignum 20)
20
* (bignump (make-bignum 20))
Tratiop引数がratioオブジェクトかどうかを調べます。
(defun ratiop (object) ...) -> boolean
入力: object
出力: boolean入力がratioオブジェクトの場合はtが返却されます。
通常であれば、分母が1の分数はinteger型であるはずです。
しかし開発においては、例えば100/1がratioオブジェクトで存在する場合があります。
本関数は上記の差異を調査するためのものです。
* 10/5
2
* (ratiop 10/5)
NIL
* (make-ratio 10 5)
10/5
* (ratiop (make-ratio 10 5))
Tshort-float-p引数がshort-floatオブジェクトかどうかを調べます。
(defun short-float-p (object) ...) -> boolean
入力: object
出力: boolean現在、nptではshort-floatオブジェクトを生成する方法はありません。
single-float-p引数がsingle-floatオブジェクトかどうかを調べます。
(defun single-float-p (object) ...) -> boolean
入力: object
出力: booleandouble-float-p引数がdouble-floatオブジェクトかどうかを調べます。
(defun double-float-p (object) ...) -> boolean
入力: object
出力: booleanlong-float-p引数がlong-floatオブジェクトかどうかを調べます。
(defun long-float-p (object) ...) -> boolean
入力: object
出力: booleancallnamep引数がcallnameオブジェクトかどうかを調べます。
(defun callnamep (object) ...) -> boolean
入力: object
出力: booleancallnameとは、関数名を表すオブジェクトであり、 通常のcarと言ったsymbolと、 setf関数を表す(setf car)形式をまとめたものです。
Common Lispにおいて、callnameオブジェクトを生成する方法はありません。
npt-systemパッケージに存在する、オブジェクト生成の関数仕様を示します。
defun make-character
defun make-fixnum
defun make-bignum
defun make-ratio
defun make-complex
defun make-callnamemake-charactercharacterオブジェクトを複製します。
(defun make-character (character) ...) -> character
入力: character
出力: character入力で受け取った文字オブジェクトを複製して返却します。
本関数の目的は、キャッシュを避けて新規オブジェクトを生成することです。
nptでは、文字コードが#x80未満であれば同一のオブジェクトが返却されます。
よって、eqは一致します。
* (eq #\A #\A)
T
* (eq #\A (read-from-string "#\\A"))
Tもし違うオブジェクトが必要なときは本関数で複製します。
* (eq #\A (make-character #\A))
NIL
* (eql #\A (make-character #\A))
Tmake-fixnumfixnumオブジェクトを複製します。
(defun make-fixnum (fixnum) ...) -> fixnum
入力: fixnum
出力: fixnum入力で受け取ったfixnumオブジェクトを複製して返却します。
本関数の目的は、キャッシュを避けて新規オブジェクトを生成することです。
nptでは、値が-1024から+1024の整数であれば、 同一のオブジェクトが返却されます。
よって、eqは一致します。
* (eq 11 11)
T
* (eq 11 (read-from-string "11"))
Tもし違うオブジェクトが必要なときは本関数で複製します。
* (eq 11 (make-fixnum 11))
NIL
* (eql 11 (make-fixnum 11))
Tmake-bignumbignumオブジェクトを生成します。
(defun make-bignum (integer) ...) -> bignum
入力: integer
出力: bignum入力で受け取った整数値からbignumオブジェクトを生成します。
本関数の目的は、小さな整数値のbignumオブジェクトを生成することです。
通常であれば、例えば10や2000と言った整数は、 fixnumオブジェクトが返却されます。
本関数は強制的にbignumオブジェクトを生成するときに使用します。
★注意
nptでは、本来fixnumの範囲にある整数が bignumオブジェクトで渡されることを想定していません。
本関数を用いて実施した結果については全て未定義です。
* 10
10
* (make-bignum 10)
10
* (fixnump 10)
T
* (bignump 10)
NIL
* (fixnump (make-bignum 10))
NIL
* (bignump (make-bignum 10))
Tmake-ratioratioオブジェクトを生成します。
(defun make-ratio (numer denom) ...) -> ratio
入力: numer 分子を表すintegerオブジェクト
入力: denom 分母を表すintegerオブジェクト
出力: ratio入力で受け取った整数numer, denomから、ratioオブジェクトを生成します。
本関数の目的は、約分を無視してratioオブジェクトを生成することです。
通常であれば、例えば10/5と言った分数は、 約分されて2というfixnumオブジェクトが返却されます。
本関数は強制的にratioオブジェクトを生成するときに使用します。
★注意
nptでは、本来integerとなるものがratioオブジェクトで渡されることを想定していません。
本関数を用いて実施した結果については全て未定義です。
* 10/5
2
* (ratiop 10/5)
NIL
* (make-ratio 10 5)
10/5
* (ratiop (make-ratio 10 5))
Tmake-complexcomplexオブジェクトを生成します。
(defun make-complex (real imag) ...) -> complex
入力: real 実数を表すrealオブジェクト
入力: imag 虚数を表すrealオブジェクト
出力: complex入力で受け取った整数real, imagから、complexオブジェクトを生成します。
本関数の目的は、虚数が0の整数型complexオブジェクトを生成することです。
通常であれば、例えば#c(10 0)と言った数は、 10というfixnumオブジェクトが返却されます。
本関数は強制的にcomplexオブジェクトを生成するときに使用します。
★注意
nptでは、本来integerとなるものがcomplexオブジェクトで渡されることを想定していません。
本関数を用いて実施した結果については全て未定義です。
* #c(10 0)
10
* (complexp #c(10 0))
NIL
* (make-complex 10 0)
#C(10 0)
* (complexp (make-complex 10 0))
Tmake-callnamecallnameオブジェクトを生成します。
(defun make-callname (x) ...) -> callname
入力: x function-name
出力: callname関数名を扱うcallnameオブジェクトを生成します。
入力はsymbol型か(setf symbol)型を受け取ります。
npt-systemパッケージに存在する、型確認の関数仕様を示します。
defun subtypep!
defun parse-type
defun type-objectsubtypep!subtypepの結果をsymbolで取得します。
(defun subtypep! (left right) ...) -> symbol
入力: left type-specifier
入力: right type-specifier
出力: symbol通常のsubtypepとは違い、型が排他的かどうかも調査できます。
返却値は下記の通りです。
npt-system::includenpt-system::excludenpt-system::falsenpt-system::invalidparse-type型をパースします。
(defun parse-type (object) ...) -> type
入力: object type-specifier
出力: type主な目的は型として形が正しいかどうかの調査です。
返却値は型オブジェクトとなりますが、 通常のCommon Lispで型オブジェクトを利用することはありません。
type-object型オブジェクトからLispオブジェクトを生成します。
(defun type-object (type) ...) -> result
入力: type
出力: result (or cons symbol)入力の型オブジェクトから、型の名前を生成します。
npt-systemパッケージに存在する、メモリストリームの関数仕様を示します。
defun make-memory-input-stream
defun make-memory-output-stream
defun make-memory-io-stream
defmacro with-input-from-memory
defmacro with-output-to-memory
defun get-output-stream-memory
defun memory-stream-p
defun (setf memory-stream-p)memory-streamは、ファイルの代替として用意されたストリームです。
通常のファイルはbyteをデータの単位としているため、 本ストリームも(unsigned-byte 8)をデータの基本単位としています。
バイナリストリームであるため、例えばread-char関数のような 文字列型のストリーム関数は使用できず、 read-byte関数のようなバイナリ型の操作関数が使用できます。
memory-streamはopen関数のfilespecに使用することができます。
(with-open-stream (file (make-memory-input-stream #(#x48 #x65 #x6C #x6C #x6F)))
(with-open-file (stream file)
(read-line stream)))
-> "Hello", Tストリームが2つ重複して動作することになりますが、 ファイルポインタはopenの方が優先され、 memory-streamの方はopen関数によって操作されます。
上記の場合、with-open-file内部で実行された(open file)の:inputオペレーションが、 fileに格納されているmemory-streamに対して、 最初に(file-position file :start)を実行します。
read-line関数によってデータの読み込みが生じたときは、 streamのファイルポインタを前進させる処理を行うときに、 memory-streamのファイルポインタも同時に前進させます。
memory-streamには下記の4つのパラメーターが存在します。
:input 初期値:size 内部バッファのbyte数:array 内部バッファ数の初期値:cache キャッシュの有無:inputはmemory-streamの初期値です。
必ず(unsigned-byte 8)のsequenceでなければなりません。
:sizeはmemory-sequenceが内部に保有するバッファのサイズです。
省略時はコンパイル時にLISP_DEBUGが指定された場合は64byte、 それ以外の場合は4096byteです。
指定した数のバッファがmemory-stream内部でいくつも生成されることになります。
:arrayは最初に保有する内部バッファの配列数です。
省略時はコンパイル時にLISP_DEBUGが指定された場合は4個、 それ以外の場合は8個です。
例えば、4096byte×8個以上のデータ数が要求された場合、 配列数8個から倍の16個、32個、64個、……、と拡張されていきます。
:cacheはキャッシュの有効・無効を選択します。
この引数は開発時にデバッグとして使用するためのものです。
キャッシュとは、memory-streamには何の影響もありませんが、 open関数に渡されたとき、生成されたfile-streamが キャッシュを使用するかどうかが選択されます。
通常のファイルとは違い、memory-streamのデータは 全てメモリ上に配置されているため、 キャッシュ機能をONにする必要はありません。
省略時はコンパイル時にLISP_DEBUGが指定された場合はT(有効)、 それ以外の場合はNIL(無効)です。
memory-streamは、入力・出力・入出力の3種類存在しますが、 全て同じオブジェクトを使用しているため いつでも種類を変更することができます。
make-memory-input-stream入力専用のmemory-streamを生成します。
(defun make-memory-input-stream (sequence &key size array cache) ...) -> stream
入力: sequence
入力: size (or null (integer 1 *))
入力: array (or null (integer 1 *))
入力: cache t ;; boolean
出力: stream input-memory-streamsequenceはストリーム内の初期値に使用されます。
sizeは内部バッファのサイズであり、初期値は4096byteです。
arrayは初期のバッファ保有数であり、初期値は8です。
cacheは開発用です。
make-memory-output-stream出力専用のmemory-streamを生成します。
(defun make-memroy-output-stream (&key input size array cache) ...) -> stream
入力: input sequence
入力: size (or null (integer 1 *))
入力: array (or null (integer 1 *))
入力: cache t ;; boolean
出力: stream output-memory-streaminputはストリーム内の初期値に使用されます。
sizeは内部バッファのサイズであり、初期値は4096byteです。
arrayは初期のバッファ保有数であり、初期値は8です。
cacheは開発用です。
make-memory-io-stream入出力対応のmemory-streamを生成します。
(defun make-memroy-io-stream (&key input size array cache) ...) -> stream
入力: input sequence
入力: size (or null (integer 1 *))
入力: array (or null (integer 1 *))
入力: cache t ;; boolean
出力: stream io-memory-streaminputはストリーム内の初期値に使用されます。
sizeは内部バッファのサイズであり、初期値は4096byteです。
arrayは初期のバッファ保有数であり、初期値は8です。
cacheは開発用です。
with-input-from-memoryマクロwith-input-from-stringのmemory-stream版です。
(defmacro with-input-from-memory
((stream vector &key size array) declaration* form*) ...)
-> resultstring-streamとは違い、引数indexがありません。
with-output-to-memoryマクロwith-output-to-stringのmemory-stream版です。
(defmacro with-output-to-memory
((var &key input size array) declaration* form*) ...)
-> result返却値は、get-output-stream-memoryの戻り値が使用されます。
string-streamとは違い、第2引数のarrayは対応していません。
戻り値は(array (unsigned-byte 8))の配列になります。
get-output-stream-memorymemory-streamが保有している全てのデータを配列にして返却します。
(defun get-output-stream-memory (stream) ...) -> vector
入力: stream memory-stream
出力: vector (array (unsigned-byte 8))引数は出力用のmemory-streamだけではなく、入力と入出力も受け付けます。
string-streamとは違い、値を出力した後でも内容は削除されません。
返却値は(array (unsigned-byte 8))の配列になります。
memory-stream-p引数がmemory-streamかどうかを調べます。
(defun memory-stream-p (object) ...) -> result
入力: object
出力: result (member :input :output :io nil)memory-streamではない場合は、nilを返却します。
input-memory-streamの場合は、:inputを返却します。
output-memory-streamの場合は、:outputを返却します。
io-memory-streamの場合は、:ioを返却します。
(setf memory-stream-p)memory-streamの種類を変更します。
(defun (setf memory-stream-p) (result stream) ...) -> result
入力: stream memory-stream
入力: result (member :input :output :io)例えば、入力memory-streamを、入出力memory-streamに変更できます。
設定値が:inputで入力、:outputで出力、:ioで入出力に変更します。
それぞれのmemory-streamは全て同一のオブジェクトであり、 種類を変更することによって、streamの入出力関数 (例えばread-byteなど)の使用可否を変更できます。
* (setq x (make-memory-output-stream))
#<STREAM MEMORY-OUTPUT #x8012801e0>
* (write-sequence '(65 66 67) x)
(65 66 67)
* (file-position x :start)
T
* (with-open-file (s x) (read-line s))
-> ★error
* (memory-stream-p x)
:OUTPUT
* (setf (memory-stream-p x) :input)
:INPUT
* (with-open-file (s x) (read-line s))
"ABC"
T
*npt-systemパッケージに存在する、ソートの関数仕様を示します。
defun simple-sort
defun bubble-sort
defun quick-sort
defun merge-sortsimple-sort選択ソートを行います。
(defun simple-sort (sequence call &key key) ...) -> result
入力: sequence
入力: call 関数
入力: key 関数
出力: result sequence不安定であり、実行コストがO(n^2)のソートを行います。
bubble-sortバブルソートを行います。
(defun bubble-sort (sequence call &key key) ...) -> result
入力: sequence
入力: call 関数
入力: key 関数
出力: result sequence安定であり、実行コストがO(n^2)のソートを行います。
quick-sortクイックソートを行います。
(defun quick-sort (sequence call &key key) ...) -> result
入力: sequence
入力: call 関数
入力: key 関数
出力: result sequence不安定であり、実行コストがO(n log n)のソートを行います。
merge-sortマージソートを行います。
(defun merge-sort (sequence call &key key) ...) -> result
入力: sequence
入力: call 関数
入力: key 関数
出力: result sequence安定であり、実行コストがO(n log n)のソートを行います。
npt-systemパッケージに存在する、Paperオブジェクトの関数仕様を示します。
defun make-paper
defun info-paper
defun array-paper
defun body-papermake-paperPaperオブジェクトを生成します。
(defun make-paper (array body &key fill type) ...) -> result
入力: array サイズ
入力: body サイズ
入力: fill 初期値
入力: type User値
出力: result paperPaperオブジェクトとは、simple-vectorと バイト形式のバッファをあわせもつオブジェクトです。
arrayがnilか0の場合は、body形式で生成されます。
bodyがnilか0の場合は、array形式で生成されます。
arrayとbodyが1以上の場合は、array-body形式で生成されます。
array-body形式の場合、arrayとbodyはともに#xFFFF以下にして下さい。
:fillは、body形式の初期値を指定します。
nilか、tか、0x00~#xFFの整数を指定します。
nilの場合は初期化を行いません。
tは0と同じです。
:typeは、User値です。
User値とは、形式に関係なく#x00~#xFFまでの値を保有する1byteの領域の事です。
デフォルト値は0です。
Paperオブジェクトの種類として利用することをお勧めします。
info-paperPaperオブジェクトに対して、下記の操作を行います。
(defun info-paper (paper symbol &optional second) ...) -> result
入力: paper
入力: symbol, (member list vector type length)
入力: second
出力: resultsymbolがtypeのときは、User値の取得と設定を行います。
secondが指定されていなかった場合は取得です。
secondが指定された場合は設定です。
symbolがlistのときは、arrayかbodyの内容をlistで返却します。
secondが指定されないかnilの場合は、全てのarrayが返却されます。
secondがnilではない場合は、全てのbodyが返却されます。
symbolがvectorのときは、arrayかbodyの内容をvectorで返却します。
secondが指定されないかnilの場合は、全てのarrayが返却されます。
secondがnilではない場合は、全てのbodyが返却されます。
bodyのときは、(unsigned-byte 8)形式のspecialized arrayで返却されます。
symbolがlengthのときは、arrayかbodyの長さを返却します。
secondが指定されないかnilの場合は、arrayの長さが返却されます。
secondがnilではない場合は、body長さが返却されます。
array-paperPaperオブジェクトに対して、arrayの設定と取得を行います。
(defun array-paper (paper index &optional value) ...) -> result
入力: paper
入力: index, (integer 0 *)
入力: value
出力: resultvalueが指定されていなかった場合は取得です。
valueが指定された場合は設定です。
body-paperPaperオブジェクトに対して、bodyの設定と取得を行います。
(defun body-paper (paper index &optional value) ...) -> result
入力: paper
入力: index, (integer 0 *)
入力: value
出力: resultvalueが指定されていなかった場合は取得です。
valueが指定された場合は設定です。
npt-systemパッケージに存在する、その他の関数の仕様を示します。
defun package-export-list
defun large-number
defun equal-random-state
defun remove-file
defun remove-directory
defun byte-integer
defun fpclassify
defun eastasian-set
defun eastasian-get
defun eastasian-widthpackage-export-listpackageのexportリストを取得します。
(defun package-export-list (package-designator) ...) -> list
入力: package-designator
出力: listパッケージでexportされているsymbolの名前のリストを取得します。
large-number数値を英語で表したときの、3桁区切りのカンマに対応する表記を取得します。
(defun large-number (value &optional (cardinal t)) ...) -> string
入力: value 数値
入力: cardinal boolean
出力: string数値を3桁区切りにして、右からn-1番目に対応する文字列を返却します。
下記の数値を考えたとき、
1,000,000
引数0が右のカンマに対応するのでthousandです。
引数1が右から2番目に対応するのでmillionです。
引数cardinalがnilで序数になります。
* (large-number 0)
"thousand"
* (large-number 1)
"million"
* (large-number 1000)
"millinillion"
* (large-number 5555)
"quintilliquinquinquagintaquingentillion"
* (large-number 5555 nil)
"quintilliquinquinquagintaquingentillionth"equal-random-staterandom-stateが等しいかどうかを調べます。
(defun equal-random-state (a b) ...) -> boolean
入力: a random-state
入力: b random-state
出力: booleanremove-fileファイルを削除します。
(defun remove-file (pathname &optional (error t)) ...) -> boolean
入力: pathname
入力: errorp
出力: boolean標準関数のdelete-fileと違い、引数errorpで失敗の場合を扱うことができます。
標準ではerrorpがtのため、delete-fileと同じです。
errorpがnilの場合は、削除に成功するとtを返却し、失敗したらnilを返却します。
remove-directoryディレクトリを削除します。
(defun remove-directory (pathname &optional (error t)) ...) -> boolean
入力: pathname
入力: errorp
出力: booleanerrorpがtのときは、削除に失敗したときにerrorが発生します。
errorpがnilのときは、削除に成功するとtを返却し、失敗したらnilを返却します。
byte-integerCPUのエンディアンを考慮して、unsigned-byteの値を連結して整数を返却します。
(defun byte-integer (&rest args) ...) -> result
入力: args (unsigned-byte 8)
出力: result (integer 0 *)例えば、非符号付き16bit整数uint16_tを考えたとき、 バイト列#x00 #x01がいくつになるかを取得するときに使用します。
CPUがbig endianの場合は、上位バイトが#x00で、下位バイトが#x01となるため、 返却値は#x01=1です。
一方、CPUがlittle endianの場合は、返却値が#x0100=256となります。
fpclassify浮動小数値の状態と符号を取得します。
(defun fpclassify (float) ...) -> type, sign
入力: float
出力: result symbol
出力: result 1か-1floatが無限大のとき、typeはnpt-system::fp-infiniteです。
floatが非数のとき、typeはnpt-system::fp-nanです。
floatが通常の数のとき、typeはnpt-system::fp-normalです。
floatがデノーマル数のとき、typeはnpt-system::fp-subnormalです。
floatがゼロのとき、typeはnpt-system::fp-zeroです。
floatの符号が正のとき、signは1です。
floatの符号が負のとき、signは-1です。
本来、Common Lispでは、無限大と非数を扱うことはできず、 発生した時点でarithmetic-error conditionが発生します。
eastasian-setEast Asian Widthのカテゴリ別に、文字数を設定します。
(defun eastasian-set (string-designator intplus &optional error) ...) -> boolean) */
入力: string-designator
入力: intplus (integer 0 *)
入力: error boolean
出力: booleanEast Asian Widthとは、日本語で言う半角/全角を定義したものです。
入力のstring-designatorは、N, A, H, W, F, NAの6種類指定できます。
それぞれのカテゴリに対して、intplusで指定した文字数を設定します。
intplusには、半角1か全角2を指定することになると思います。
errorがtのときは、該当するカテゴリが無かったらエラーが発生します。
正常終了時にはtが返却されます。
eastasian-getEast Asian Widthのカテゴリに対応する文字数を取得します。
(defun eastasian-get (string-designator) ...) -> (values IntplusNull symbol)
入力: string-designator
出力: intplusNull 文字数かnil
出力: symbol カテゴリのsymbolEast Asian Widthとは、日本語で言う半角/全角を定義したものです。
入力のstring-designatorは、N, A, H, W, F, NAの6種類指定できます。
それぞれのカテゴリに対応した文字数が返却されます。
エラーの場合はNILが返却されます。
eastasian-widthEast Asian Widthを考慮した長さを返却します。
(defun eastasian-width (var) ...) -> (values IntplusNull boolean)
入力: var (or integer character string)
出力: IntplusNull 文字数かnil
出力: boolean入力varには、文字、数値、文字列を指定できます。
数値の場合は文字コードとみなします。
* (eastasian-width #\A)
1
T
* (eastasian-width #\u3042)
2
T
* (eastasian-width #x3044)
2
T
* (eastasian-width "あいうHello")
11
T