(rontolisp) docs
← 関数

cl パッケージの関数

標準の Common Lisp 関数で、cl パッケージに属します (cl-user が使用するため、 通常のプログラムでは修飾なしで利用できます)。各関数名はそれぞれのページにリンクして います。

関数例結果
+(+ 1 2 3), (+ 1.5 2.5)6, 4.0
-(- 10 3), (- 3.5 1.5)7, 2.0
*(* 3 4), (* 2.0 3.0)12, 6.0
/(/ 1 2), (/ 10 2), (/ 7.0 2.0)1/2(正確なratio)、5, 3.5
mod(mod 10 3), (mod -13 4)1, 3(結果は除数の符号を取ります)
rem(rem 13 4), (rem -13 4)1, -1(結果は被除数の符号を取ります)
=(= 1 1), (= 3 3 3)t(可変長引数)
eq(eq 'foo 'foo), (eq 1.5 1.5)t, t(シンボルとconsセルはオブジェクトの同一性。数値と文字は eql と同じく型と値で比較されます)
eql(eql 1.5 1.5), (eql 3 3.0)t, nil(同じ型かつ同じ値の数値は等しくなります — 例: 浮動小数点やratio。eq と同じ述語です)
equal(equal '(1 2 (3)) '(1 2 (3))), (equal "abc" "abc")t, t(構造的等価性: consセルはcarとcdrで再帰的に比較され、それ以外は eql と同様)
equalp(equalp "ABC" "abc")t(equal と同様だが文字列・文字は大小文字を区別せず数値は値で比較。配列・ハッシュテーブルは eql にフォールバック)
<(< 1 2), (< 1 2 3)t(可変長引数。狭義単調増加のとき真)
>(> 2 1), (> 3 2 1)t(可変長引数)
<=(<= 1 1)t(可変長引数)
>=(>= 2 1)t(可変長引数)
print(print 42)42 を改行付きで印字します
prin1(prin1 42)print と同様ですが改行なし
princ(princ "hello")引用符なし・改行なしで印字します
terpri(terpri)改行のみを印字します
fresh-line(fresh-line)標準出力がまだ行頭にない場合のみ改行を印字します。nilを返します
princ-to-string(princ-to-string '(1 "x"))"(1 x)" -- princ が印字する文字列
prin1-to-string(prin1-to-string "abc")"\"abc\"" -- prin1 が印字する文字列(読み戻し可能な形式)
write(write "hi" :escape nil)hi を印字します。各キーワードはその 1 回の出力のあいだ対応する印字制御変数を束縛します
pprint pprint-newline pprint-indent pprint-tab(pprint-newline :mandatory s)改行するのは :mandatory のときだけです。ストリームが桁位置を持たないため折り返しは起きません
copy-pprint-dispatch set-pprint-dispatch pprint-dispatch(pprint-dispatch 21 table)プリティプリント・ディスパッチテーブル(エントリと検索は実装済み。通常の印字操作は参照しません)
concatenate(concatenate 'string "foo" "bar")"foobar"('string / 'list / 'vector の 3 系統。コンパイラはリテラルの引用指定子を要求します)
string-upcase(string-upcase "abc")"ABC"(全 Unicode 対応。各文字に char-upcase を適用するため長さは保存されます)
string-downcase(string-downcase "ABC")"abc"
string-capitalize(string-capitalize "hello world")"Hello World"(各単語の最初の文字)
nstring-upcase nstring-downcase nstring-capitalize(nstring-upcase (copy-seq "abc"))"ABC" — 破壊的な綴り。変換結果を引数に書き戻します(可変な文字ベクタは全バックエンドでその場書き換え。不変な文字列はコンパイル系で再構築)
subseq(subseq "hello" 1 3)"el"(文字列とリストで機能します。例: (subseq '(1 2 3 4) 1 3) => (2 3)。end 引数は省略可能)
make-string(make-string 3 :initial-element #\x)"xxx" -- :initial-element(デフォルトは空白)を n 個並べた新しい文字列。:element-type は受け付けるが無視
make-sequence(make-sequence 'list 3)(nil nil nil) -- リテラルのクォートされた結果型のシーケンス(文字列型は make-string、list は make-list、ベクタ型は make-array 経由)
replace(replace (make-string 5 :initial-element #\a) "XY" :start1 1)"aXYaa" -- sequence-2 を sequence-1 にコピー(:start1/:end1/:start2/:end2)。文字列対応で、確保したバッファはその場で書き換える
fill(fill (list 1 2 3) 7)(7 7 7) -- :start/:end の範囲の全要素に 1 つの値を格納。ベクタ・リストに対して破壊的で、文字列の扱いは replace と同じ
string=(string= "abc" "abc"), (string= "together" "frog" :start1 1 :end1 3 :start2 2)t(大小文字を区別する文字列等価。:start1/:end1/:start2/:end2 で比較する部分文字列を指定)
string< string> string<= string>= string/=(string< "abc" "abd")2 -- 大小文字を区別する辞書順比較: string1 内の不一致インデックス(等しい場合は end1)、成り立たなければ nil。:start1/:end1/:start2/:end2 も同様に指定可能
string-equal(string-equal "ABC" "abc")t(大小文字を区別しない、ASCII)
string-lessp string-greaterp string-not-greaterp string-not-lessp string-not-equal(string-not-greaterp "Abcde" "abcdE")5 -- string< string> string<= string>= string/= の大小文字を区別しない版
string-trim(string-trim " " " hi ")"hi"(指定した文字集合の文字を両端から取り除きます)
string-left-trim(string-left-trim "x" "xxhi")"hi"
string-right-trim(string-right-trim "x" "hixx")"hi"
read-line(read-line), (read-line stream)標準入力(または入力ストリーム)から1行読み込み、文字列として返します。EOFでは nil
y-or-n-p(y-or-n-p "Delete ~A?" f)省略可能な format 制御文字列と " (y or n) " を出力し、標準入力から 1 行読んで、y/Y なら t、n/N なら nil を返し、それ以外は聞き直します。lite 版: CL はエコーなしで 1 文字を読み、入力の終端ではここでは nil を返します
peek-char(peek-char nil s), (peek-char t s), (peek-char #\; s)ストリームの次の文字を消費せずに返します。peek-type が nil なら何も読み飛ばさず、t なら空白を、文字ならその文字までを読み飛ばします。返した文字はストリームに残ります。EOF では end-of-file を通知し、eof-error-p が nil の場合は eof-value を返します
read-char-no-hang(read-char-no-hang s)待たずに取得できる文字があればそれを返します。ストリームハンドルでは read-char と同じで、Gray ストリームのインスタンスでは rontolisp:stream-read-char-no-hang にディスパッチします
unread-char(unread-char c s)直前に読み取った文字を押し戻し、次の読み取りが再びそれを返すようにします。nil を返します。Gray ストリームのインスタンスでもストリームハンドルでも、1 ストリームにつき 1 文字を保持します
open(open "f.txt"), (open "f.txt" :output), (open "f.bin" :input '(unsigned-byte 8))ファイルを開いてストリームを返します。方向はリテラルの :input(デフォルト、読み込み)または :output(作成/切り詰め、書き込み)でなければなりません。省略可能な要素型はリテラルの 'character(デフォルト、テキスト)または '(unsigned-byte 8)(バイナリ)でなければなりません
close(close stream)open で開いたストリームを閉じます。t を返します
probe-file(probe-file "f.txt")ファイルが存在すればそのパス名、存在しなければ nil。存在しないパスで失敗しない唯一のファイル操作です(open は通知します)。uiop:file-exists-p は同じ操作です
truename(truename "f.txt")ファイルが存在すればそのパス名、存在しなければエラー — probe-file の通知する版であり、(ignore-errors (truename p)) が可搬な存在検査になる理由です
directory(directory "src/*.lisp")pathspec に一致するパス名をソートして返します。そのディレクトリ接頭辞を保ち、サブディレクトリには末尾に / を付けます。ワイルドな名前コンポーネントは照合され (* は任意個、? は 1 文字、* 単独は CL と同じく「型なし」の意味)、ワイルドでない場合は自分自身を指すので、ディレクトリの一覧は "src/" ではなく "src/*.*" です。ワイルドなディレクトリコンポーネントは走査され、* は 1 階層、** はサブツリー全体です
pathname-directory(pathname-directory "a/b/c.txt")(:RELATIVE "a" "b") — パス名のディレクトリ部分を CL のリスト形式 (:absolute/:relative と階層ごとの文字列) で返し、無ければ nil。純粋な文字列処理で、ファイルシステムは読みません
pathname-name(pathname-name "d/a.b.c")"a.b" — 型を除いたファイル名部分。最後の / より後ろで、かつ最後のドットより前です (位置 0 のドットは名前の一部)。ファイルを指さないパス名では nil
pathname-type(pathname-type "d/a.b.c")"c" — ドットを除いた型 (拡張子)。無ければ nil。同じ分割のもう半分です
pathname-host(pathname-host "d/a.txt")常に nil — フラットな名前文字列はホスト部分を持ちません。指示子の検証は行われます
pathname-device(pathname-device #P"d/a.txt")同じ理由で常に nil (Unix 上の SBCL と同じ答えです)
pathname-version(pathname-version #P"d/a.txt")常に nil — ここにファイルのバージョンはありません
wild-pathname-p(wild-pathname-p "d/*.txt" :name)パス名 (またはフィールドキーで指定した :directory/:name/:type 構成要素) が * か ? を含むか。:host/:device/:version は常に nil
enough-namestring(enough-namestring "/a/b/c.lisp" "/a/")"b/c.lisp" — defaults (省略時は *default-pathname-defaults*) にマージし直すと同じファイルを指す最短の名前文字列。merge-pathnames の逆操作です
file-namestring directory-namestring host-namestring(file-namestring #P"/a/b/c.txt")"c.txt" — ネームストリングの文字列成分。名前と型の部分、ディレクトリ部分(連結すると namestring に戻ります)、および rontolisp が持たないホストを表す ""
translate-pathname(translate-pathname "src/f.lisp" "src/*.lisp" "build/*.fasl")#P"build/f.fasl" — source を from-wildcard と照合し、各 */? が捕捉した部分を to-wildcard に差し込みます。一致しない source はエラー
translate-logical-pathname(translate-logical-pathname "d/a.txt")#P"d/a.txt" — 恒等写像。rontolisp のパス名はすべて物理パス名なので変換するものがありません
logical-pathname(logical-pathname "SYS:SRC;")常にエラー — 論理ホストを定義できないため、論理パス名を指す引数は存在しません
pathname(pathname "d/x")#P"d/x" — 正規のコンストラクタ: パス名はそのまま、文字列はそれが指定するパス名に包まれ、それ以外はシグナルします
parse-namestring(parse-namestring "d/a.txt")#P"d/a.txt" (第 2 値は停止位置) — ライト版: ホストのパースはなく、文字列全体が名前文字列です
make-pathname(make-pathname :name "b" :defaults "d/a.sql")#P"d/b.sql" — :directory/:name/:type からパス名を組み立て、指定されなかった構成要素は :defaults から取ります。構成要素ごとの補完でありマージではありません: 指定した構成要素は defaults のものを置き換え、明示的な nil は「その構成要素なし」を意味します。4 バックエンドすべてで実行時の関数として動作し、リテラルの呼び出しは加えてコンパイル時に畳み込まれます
namestring(namestring #P"/tmp/x")"/tmp/x" — パス名が保持する名前文字列。文字列 (指定子) はそのまま通り、それ以外はシグナルを発生させます。uiop:namestring と uiop:native-namestring も同じ関数です
merge-pathnames(merge-pathnames "zoneinfo/" "/opt/lt/")第 1 のパス名の欠けている部分を第 2 のもので補います (どちらの綴りも受け付けます)。絶対ディレクトリが優先され、相対ディレクトリは連結され、無い場合は defaults のものが使われます。uiop:merge-pathnames* は同じマージです
open-stream-p(open-stream-p stream)ストリームが開いている間は t、close 後は nil
force-output(force-output stream)出力ストリームを書き出す (引数なしは標準出力)。nil を返す
finish-output(finish-output stream)force-output と同じ操作。ここでは書き出し後の書き込みはすべて同期的
clear-output(clear-output stream)出力ストリームの未書き込みバッファを捨てる。ここではその形でバッファしないため、指定子を検証して nil を返す
clear-input(clear-input stream)入力ストリームの未処理バッファを捨てます。ここではそのようなバッファを持たないため、指定子を検証して nil を返すだけです
listen(listen stream)ブロックせずに入力を読めるなら t。Preview 1 の WASM にはこの問い合わせ手段がない
write-line(write-line "hi" stream), (write-line "hi")文字列と改行を出力ストリーム(または標準出力)に書き込みます。文字列を返します
read-byte(read-byte stream), (read-byte *standard-input* nil nil)バイナリ入力ストリーム、または t/nil 指定子なら標準入力から 1 バイト(0-255)を読み込みます。EOF では end-of-file コンディションを通知し、eof-error-p が nil の場合は eof-value を返します
write-byte(write-byte 255 stream), (write-byte 255 *standard-output*)バイナリ出力ストリーム、または t/nil 指定子なら標準出力に生の 1 バイト(0-255)を書き込みます。バイトを返します
read-sequence(read-sequence buf stream), (read-sequence buf stream :start 2 :end 4)入力ストリームからベクタを埋めます。バッファが文字ベクタなら文字、パックド浮動小数点配列(任意ランク)やパックド整数ベクタなら生のリトルエンディアン要素を一括で、それ以外はバイトです。充填位置を返します。:start/:end はリテラルのキーワードでなければなりません
write-sequence(write-sequence "abcd" s :start 1 :end 3), (write-sequence buf stream)シーケンスをストリームに書き込み、それを返します。文字列は(write-string と同様に)文字として、パックド浮動小数点配列/整数ベクタは生のリトルエンディアン要素として一括で、バイト(0-255)のベクタはバイナリ出力ストリームに書き込まれます。:start/:end はリテラルのキーワードでなければなりません
read(read), (read stream), (read stream eof-error-p eof-value)標準入力(または入力ストリーム)からS式を1つ読み込み、そのデータム分の文字だけを消費します(3つのバックエンドすべて)。EOFでは eof-value(既定は nil)
read-from-string(read-from-string "(+ 1 2)")文字列からデータを1つパースします(3つのバックエンドすべて)。省略可能な eof-error-p/eof-value および :start/:end 引数はサポートされません
parse-integer(parse-integer "42"), (parse-integer "ff" :radix 16), (parse-integer "12x" :junk-allowed t)文字列から整数をパースします。すべてのバックエンドで :start/:end/:radix/:junk-allowed をサポートします。パース停止位置が 2 番目の値になり、multiple-value-bind で観測できます。:junk-allowed がない場合、末尾の非空白文字はエラーです
copy-readtable(copy-readtable nil)ライト版スタブ: 常に nil -- リーダーはリードテーブル駆動ではないため、リードテーブルオブジェクトは存在しません (*readtable* は存在しますが nil に初期化されています)
set-dispatch-macro-character(set-dispatch-macro-character #\# #\7 fn)ライト版スタブ: 受け付けますが無視し、t を返します (ユーザーのディスパッチマクロでリーダーを拡張することはできません)
readtable-case(readtable-case *readtable*)ライト版スタブ: 常に :upcase -- リーダーはエスケープされていないシンボル名を常に大文字化します。標準リードテーブルのモードです
char schar(char "hello" 1)#\e -- 0始まりの文字列インデックスの文字 (文字列でない値や整数でないインデックスは type-error を通知)
char-code(char-code #\A)65 -- 文字のコードポイント
char-int(char-int #\A)65 -- 文字を表す非負整数。実装固有の属性を持たないため、char-code と同じ値になります
code-char(code-char 66)#\B -- 指定したコードポイントの文字
char= char< char<=(char< #\a #\b #\c)t(コードポイントによる可変長引数比較)
char-lessp char-greaterp char-not-lessp char-not-greaterp char-not-equal(char-lessp #\a #\B)t(大文字・小文字を区別しない比較の一群)
char-upcase char-downcase(char-upcase #\a)#\A(すべてのバックエンドで全 Unicode 対応の大小文字変換)
characterp(characterp #\a)t
alpha-char-p(alpha-char-p #\x), (alpha-char-p #\5)t, nil(WASMバックエンドではASCII文字)
alphanumericp(alphanumericp #\x), (alphanumericp #\-)t, nil(英字または10進数字)
graphic-char-p standard-char-p(graphic-char-p #\Space), (standard-char-p #\Newline)t, t(印字可能な文字 / 96 個の標準文字)
make-load-form(make-load-form obj)コード中のリテラルオブジェクトに対してコンパイラが参照する総称関数。メソッドが返すフォームがそれを再構築する(print-object 同様、システムメソッドなし)
make-load-form-saving-slots(make-load-form-saving-slots obj)出来合いの答え: 現在のスロット値でオブジェクトを再構築するフォーム
sxhash(sxhash "ab")構造的ハッシュ(整数/文字/文字列/シンボル/コンス)。実行内では安定、バックエンド間では非規定
sbit(sbit #*0110 1)ビットベクタ要素の読み取り。(setf (sbit v i) b) で書き込み
bit(bit #*0110 1)ビット配列の要素読み出し。(setf (bit v i) b) で書き込み
bit-and(bit-and #*0110 #*1100)#(0 1 0 0) -- 同じ次元の 2 つのビット配列の要素ごとの and。省略可能な第 3 引数は結果配列(nil で新規、t で第 1 引数を再利用)
bit-andc1(bit-andc1 #*0110 #*1100)#(1 0 0 0) -- (not-a and b)
bit-andc2(bit-andc2 #*0110 #*1100)#(0 0 1 0) -- (a and not-b)
bit-eqv(bit-eqv #*0110 #*1100)#(0 1 0 1) -- 要素ごとの同値
bit-ior(bit-ior #*0110 #*1100)#(1 1 1 0) -- 要素ごとの包括的論理和
bit-nand(bit-nand #*0110 #*1100)#(1 0 1 1) -- 要素ごとの否定論理積
bit-nor(bit-nor #*0110 #*1100)#(0 0 0 1) -- 要素ごとの否定論理和
bit-not(bit-not #*0110)#(1 0 0 1) -- 1 つのビット配列の要素ごとの否定
bit-orc1(bit-orc1 #*0110 #*1100)#(1 1 0 1) -- (not-a or b)
bit-orc2(bit-orc2 #*0110 #*1100)#(0 1 1 1) -- (a or not-b)
bit-xor(bit-xor #*0110 #*1100)#(1 0 1 0) -- 要素ごとの排他的論理和
both-case-p(both-case-p #\a)大小両形を持つ英字なら真(lower-case-p または upper-case-p)
special-operator-p(special-operator-p 'if)ANSI の 25 個の特殊オペレータで t、それ以外は nil
macro-function(macro-function 'when)マクロ展開器(インタープリタでは本物、コンパイル済み出力ではシグナルするスタブ)。関数と特殊オペレータには nil
compiled-function-p(compiled-function-p #'car)ライト版スタブ: 常に nil
function-lambda-expression(function-lambda-expression #'car)ライト版スタブ: (values nil t nil)(ソース未記録)
list-all-packages(list-all-packages)登録済みの全パッケージを find-package が返すキーワードのリストで返します(コンパイラはコンパイル時に焼き込んだテーブルから答えます)
find-class(find-class 'c)メモ化された(eq 安定な)クラスメタオブジェクト。errorp が nil でなければシグナル
allocate-instance(allocate-instance (find-class 'c))すべてのスロットが未束縛の新しいインスタンス。initform も initialize-instance も実行しない
class-name(class-name (class-of 42))クラスメタオブジェクトの名前シンボル
copy-structure(copy-structure s)s の型を持つ新しいインスタンスをスロットの値を共有したまま生成する(浅いコピー)。defstruct が特定の型に対して生成する copy-<name> コピア関数の、型を問わない汎用版
get(get 'sym 'prop)、(setf (get 'sym 'prop) v)シンボル属性リスト(プログラム全体で 1 つの名前キーのストア)
symbol-plist(symbol-plist 'sym)get が引く属性リスト全体(同じストアから)。(setf symbol-plist) はありません
remprop(remprop 'sym 'prop)同じストアから属性を 1 つ削除。存在すれば t、なければ nil
lower-case-p upper-case-p(lower-case-p #\a), (upper-case-p #\A)t, t -- 大文字化・小文字化で文字が変化するとき真(Unicode ケース表に従う)
digit-char-p(digit-char-p #\7), (digit-char-p #\f 16)7, 15 -- 指定した基数(デフォルト10)での桁の重み、またはnil
digit-char(digit-char 11 16)#\B -- 基数 (既定 10) における重みを表す文字、範囲外なら nil
eval(eval '(+ 1 2))式を評価します(3つのバックエンドすべて)。結果を返します
compile(compile nil '(lambda (x) (* x x)))lambda 式を関数に変換します(空のレキシカル環境)。コンパイル済みプログラムでは定義時のメソッド構築イディオムのみサポート
load(load "bar.lisp")ファイル内のすべてのトップレベルフォームをグローバル環境で読み込んで評価します(3つのバックエンドすべて)。t を返します
require(require :util), (require :util "lib/util.lisp")モジュールのファイル(require するファイルの隣の <name>.lisp、または明示パス)を、まだ provide されていなければロードします。モジュール名を返します。コンパイルパスではリテラルなトップレベルフォームである必要があります
provide(provide :util)モジュールをロード済みとして登録し、以後の require を no-op にします。モジュール名を返します。コンパイルパスではリテラルなトップレベルフォームである必要があります
gensym(gensym), (gensym "tmp")#:G1, #:tmp2 -- マクロの一時変数のための新しいシンボル(カウンタはプログラム全体で共有)
make-symbol(make-symbol "temp")#:temp -- 新しいアンインターンドシンボル(gensym の #: 規約、カウンタなし)
gentemp(gentemp "Q")Q1 -- prefix + カウンタの名前で intern される新しいシンボル(CLHS では非推奨。iterate が使用)
copy-symbol(copy-symbol 'foo)#:FOO -- 同名のアンインターンドシンボル。属性リスト引数は無視され、コピーは make-symbol の同一性差異を引き継ぐ
intern(intern "foo")シンボル foo。カレントパッケージ(in-package の状態)または指定したパッケージにインターンされ、そのメンバーテーブルに記録されます。(intern name :keyword) はキーワードを作ります。第 2 の値はインターン前にその名前が持っていたステータス(新しい名前なら nil)
find-symbol(find-symbol "car")パッケージがその名前をアクセス可能にしていれば(存在するメンバー、継承したエクスポート、標準名、キーワード)car、なければ nil。存在しないパッケージを指定した場合も nil(コンパイラ: 読み込み/コンパイル時パッケージで nil を返せるのはリテラル文字列のときだけ。make-package の産物のメンバーテーブルはどこでも参照されます)
find-package(find-package :cl):cl -- lite 版: 大文字化されたパッケージ名のキーワード(パッケージオブジェクトはありません)。未知なら nil(コンパイラは計算された指定子をコンパイル時に埋め込んだ表から解決します)
symbol-name(symbol-name 'foo)"FOO" -- シンボルは CL 同様大文字化されて読まれるので (symbol-name 'car) も "CAR"
symbol-package(symbol-package :foo):keyword -- find-package と同じキーワード形式(標準シンボルは t と nil も含めて :cl、それ以外は :cl-user、#: シンボルと unintern がホームから取り除いたシンボルは nil)。コンパイラは cl と cl-user のどちらにも :cl-user を返します
package-name(package-name (find-package :cl-user))"CL-USER" -- パッケージ指示子の名前文字列。find-package で解決され、未知の指示子はシグナルします
package-use-list(package-use-list :cl-user)(:CL) -- そのパッケージが use しているパッケージを find-package のキーワードで返します。未知の指示子はシグナルします
package-used-by-list(package-used-by-list :cl)逆向き: use リストにこのパッケージを含むすべてのパッケージ
package-shadowing-symbols(package-shadowing-symbols :cl-user)nil -- パッケージのシャドーイングシンボル(defpackage の :shadow / :shadowing-import-from の名前に shadow / shadowing-import が加えたものを足したもの)を名前順に。指示子の検査は行います
shadow(shadow "X" :pkg)t -- 名前をパッケージ自身のシャドーイングシンボルにします(その名前のものが存在しなければ新しくインターン)
shadowing-import(shadowing-import 'other:x :pkg)t -- 同名の既存シンボルを押しのけてシンボルをインポートし、シャドーイングとして列挙します
unintern(unintern sym :pkg)シンボルが存在してパッケージのメンバーテーブルから取り除かれたら t(自前のシンボルはホームを失います)、存在しなければ nil
make-package(make-package :mypkg :use '(:cl))実行時にパッケージを作成し、そのキーワードを返します。衝突や未知の :use 項目は捕捉可能な package-error を signal します
delete-package(delete-package :mypkg)t -- make-package の成果物を削除します。読込/compile 時パッケージや未知の指示子は package-error を signal します
rename-package(rename-package :mypkg :new :nick)make-package の成果物の名前を変更し、ニックネームを置換します。同じ失敗は signal します
packagep(packagep :cl)登録済みパッケージを指す指示子なら t、そうでなければ nil -- signal しません
package-nicknames(package-nicknames :cl)("COMMON-LISP") -- ニックネーム文字列をソート順で。未知の指示子は package-error を signal します
find-all-symbols(find-all-symbols 'car)(CAR) -- その名前で到達可能な重複のない全シンボルを、コードが綴る形で
apropos-list(apropos-list "CAR" :cl)(CAR MAPCAR) -- 同じ宇宙に対する部分文字列検索(大文字小文字を区別しない)
apropos(apropos "CAR" :cl)各一致を印字して nil を返します
package-error-package(package-error-package c)package-error コンディションから原因の指示子を取り出します
symbol-value(symbol-value '*level*)グローバル変数の値。未束縛の名前はエラー(レキシカルな束縛は見えない)
set(set '*level* 8)、(setf (symbol-value '*level*) 8)計算された名前でグローバル変数を設定し、未束縛なら束縛を作成(有効な動的束縛は変更しない)
boundp(boundp '*level*)シンボルが束縛されたグローバル変数を指すとき t(t/nil/キーワードは自己束縛)
fboundp(fboundp 'car)関数・マクロ・特殊形式に対して t(コンパイラ: 計算された引数は関数のみ判定)
fmakunbound(fmakunbound 'greet)greet -- 名前を再び「呼び出し時に未定義」にします(コンパイラ: 遅延束縛の参照のみ)
macroexpand-1(macroexpand-1 '(unless c x))(if c nil x) -- トップレベルのフォームを 1 段階だけ展開します(ユーザーマクロと組み込みマクロ)
macroexpand(macroexpand '(outer 41))完全な展開結果: macroexpand-1 を変化しなくなるまで繰り返します
null(null nil)t
not(not nil)t(null と同一)
atom(atom 1)t
numberp(numberp 42)t
integerp(integerp 42)t
floatp(floatp 3.14)t
rationalp(rationalp 1/2)t(整数とratio)
numerator(numerator 3/4)3(整数自身がその分子)
denominator(denominator 3/4)4(整数では 1)
rational(rational 1.5)3/2 -- 浮動小数点数の正確な2進値。整数と分数は不変
rationalize(rationalize 0.1)1/10 -- 前後半 ulp で近似する最も単純な有理数。整数と分数は不変
symbolp(symbolp 'foo)t
stringp(stringp "hello")t
arrayp(arrayp "abc")T -- CL では文字列も配列。vectorp と同様
simple-string-p(simple-string-p "hello")t -- フィルポインタなし・adjustable でない・displaced でない
simple-vector-p(simple-vector-p (vector 1 2))t -- 階数 1、要素型 t、フィルポインタなし・adjustable でない・displaced でない
bit-vector-p(bit-vector-p #*0110)t -- 記憶要素型 bit で刻印されたランク1配列(:element-type 'bit)
simple-bit-vector-p(simple-bit-vector-p #*0110)t -- bit-vector-p に加え、フィルポインタなし・adjustable でない・displaced でない
listp(listp '(1 2))t
consp(consp '(1 2))t
keywordp(keywordp :foo)t
constantp(constantp 5), (constantp 'x)t, nil -- 自己評価オブジェクト(数値、文字列、文字、キーワード、t/nil)と (quote x) 形式で真(lite)。省略可能な環境引数は受け付けて無視します
streamp(streamp s)s がストリームなら t、そうでなければ nil(ストリームは自己記述的な値なので整数はストリームではない。stream/file-stream/string-stream 型指定子の裏付けでもある)
cons(cons 1 2)(1 . 2)
car(car (cons 1 2))1((car nil) は nil)
cdr(cdr (cons 1 2))2((cdr nil) は nil)
caar..cddddr(cadr '(1 2 3))2(car/cdr の合成、2~4段)
first(first '(1 2 3))1(car と同じ)
rest(rest '(1 2 3))(2 3)(cdr と同じ)
nth(nth 1 '(1 2 3))2(0始まりのインデックス)
second third fourth fifth sixth seventh eighth ninth tenth(second '(1 2 3))2
list(list 1 2 3)(1 2 3)
nthcdr(nthcdr 2 '(1 2 3))(3)(先頭のn要素をスキップ)
ldiff(ldiff '(1 2 3) '(3))(1 2)(指定した末尾より前の要素の新しいコピー。末尾でなければリスト全体)
length(length '(1 2 3)), (length "abc"), (length #(1 2 3))3, 3, 3(リスト、文字列、ベクタ。nilでは 0。その他の値は type-error を通知)
reverse(reverse '(1 2 3))(3 2 1)
member(member 2 '(1 2 3))(2 3)(carが要素と eql になる末尾、またはnil。省略可能な :test/:key キーワードを取ります。例: (member '(a d) '((a b) (a d)) :test 'equal) -> ((a d)))
find(find 2 '(1 2 3))2(要素と eql になる最初の要素、またはnil。省略可能な :test/:key キーワードを取ります)
find-if(find-if #'evenp '(1 3 6 7))6(述語を満たす最初の要素、またはnil)
find-if-not(find-if-not #'evenp '(2 4 5 6))5(述語を満たさない最初の要素、またはnil)
member-if(member-if #'oddp '(2 4 5 6))(5 6)(述語を満たす最初の要素から始まる末尾、またはnil。省略可能な :key)
member-if-not(member-if-not #'numberp '(1 2 a b))(a b)(述語を満たさない最初の要素から始まる末尾、またはnil。省略可能な :key)
position(position 3 '(1 2 3))2(要素と eql になる最初の要素の0始まりインデックス、またはnil。省略可能な :test/:key キーワードを取ります)
position-if(position-if #'evenp '(1 3 6 7))2(述語を満たす最初の要素の0始まりインデックス、またはnil)
count(count 2 '(1 2 3 2 2))3(要素と eql になる要素の数。省略可能な :test/:key キーワードを取ります)
count-if(count-if #'evenp '(1 2 3 4))2(述語を満たす要素の数)
count-if-not(count-if-not #'evenp '(1 2 3 4 5))3(述語を満たさない要素の数。:key/:start/:end/:from-end)
assoc(assoc 'b '((a . 1) (b . 2)))(b . 2)(carがキーに一致する最初のペア、またはnil。既定では eql で比較し、省略可能な :test/:key キーワードを取ります。例: (assoc "b" '(("a" . 1) ("b" . 2)) :test #'equal))
assoc-if(assoc-if #'oddp '((2 a) (3 b)))(3 b)(carが述語を満たす最初のペア、またはnil。省略可能な :key)
assoc-if-not(assoc-if-not #'numberp '((1 . a) (b . c)))(b . c)(carが述語を満たさない最初のペア、またはnil。省略可能な :key)
getf(getf '(:a 1 :b 2) :b)2(プロパティリスト中で指標に続く値、またはnil。remf の相棒。引数は2つのみで &optional default はありません)
get-properties(get-properties '(a 1 b 2) '(b))b, 2, (b 2) -- 3つの値: 最初に見つかった指標、その値、そこから始まるプロパティリストの末尾(見つからなければすべてnil)
last(last '(1 2 3)), (last '(1 2 3) 2)(3)、(2 3)(最後のconsセル、または最後の n 個のcons。空リストではnil)
butlast(butlast '(1 2 3)), (butlast '(1 2 3 4) 2)(1 2), (1 2)(末尾 n 個(既定は1)のconsを除いたコピー。個数が長さに達するとnil)
nbutlast(nbutlast (list 1 2 3 4) 2)(1 2)(破壊的な butlast。引数自身のスパインを rplacd で切ってそれを返します)
list-length(list-length '(a b c))3(真リストの長さ。循環リストではnil、ドットリストやリスト以外では type-error)
tailp(tailp 'e '(a b . e))t(オブジェクトがリストの末尾のいずれかかどうか。各consとは eq、終端のアトムとは eql で比較)
remove(remove 2 '(1 2 3 2))(1 3)(指定した要素と eql になる要素を除いた新しいリスト。省略可能な :test/:key キーワードを取ります)
remove-if(remove-if #'evenp '(1 2 3 4))(1 3)(述語を満たす要素を除いた新しいリスト)
remove-if-not(remove-if-not #'evenp '(1 2 3 4))(2 4)(述語を満たす要素のみを残した新しいリスト)
remove-duplicates(remove-duplicates '(1 2 1 3))(2 1 3)(重複要素を除き、最後の出現を残したコピー。既定では eql 比較で、省略可能な :test/:test-not/:key キーワードを取り、:start/:end は比較の対象になる範囲を区切り、:from-end t は最初の出現を残します)
delete-duplicates(delete-duplicates '(1 2 1 3) :from-end t)(1 2 3)(remove-duplicates の破壊的版という位置づけで、レンダリングとキーワードは同じです — 標準は結果を使うことを要求します)
delete(delete 2 '(1 2 3 2))(1 3)(破壊的な remove。マッチするセルをその場で切り出します。省略可能な :test/:key キーワードを取ります。先頭が変わる場合があるので戻り値を使ってください)
delete-if(delete-if #'evenp '(1 2 3 4))(1 3)(破壊的な remove-if)
delete-if-not(delete-if-not #'evenp '(1 2 3 4))(2 4)(破壊的な remove-if-not)
subst(subst 'x 'a '(a (b a) c))(x (b x) c)(非破壊的な木の置換。省略可能な :test/:test-not/:key キーワードを取ります)
subst-if(subst-if 0 #'numberp '(1 (2 x) 3))(0 (0 x) 0)(項目ではなく述語でマッチする subst。省略可能な :key)
subst-if-not(subst-if-not 0 #'listp '(1 (2)))(0 (0))(subst-if の補集合版)
nsubst / nsubst-if / nsubst-if-not(nsubst 'x 'a (list 'a 'b))(x b)(破壊的な綴り。CLHSは非破壊的な結果を返すことを認めており、これらはそうします。いずれにせよ変更されない部分木は共有されます)
search(search "bc" "abcd")1(あるシーケンスが別のシーケンス内に現れる位置、なければ nil。:start1/:end1/:start2/:end2/:test/:key/:from-end)
mismatch(mismatch "apple" "apricot")2 -- 2 つのシーケンスが最初に異なる位置 (第 1 引数上のインデックス)、一致すれば nil。キーワードは search と同じ
tree-equal(tree-equal '(1 (2 3)) '(1 (2 3)))t(木の形が同じで、葉が :test(既定 eql)または :test-not で一致すること)
substitute(substitute 0 2 '(1 2 3 2))(1 0 3 0)(旧要素と eql になるすべての要素を新要素に置き換えたコピー。省略可能な :test/:key キーワードを取ります)
nsubstitute(nsubstitute 0 2 '(1 2 3 2))(1 0 3 0)(破壊的な substitute。マッチするcarをその場で書き換えます。省略可能な :test/:key キーワードを取ります)
substitute-if(substitute-if 0 #'oddp '(1 2 3))(0 2 0)(述語を満たすすべての要素を置き換えたコピー。省略可能な :key を取り、:test はありません)
substitute-if-not(substitute-if-not 0 #'oddp '(1 2 3))(1 0 3)(substitute-if の補集合版)
nsubstitute-if(nsubstitute-if 0 #'oddp (list 1 2 3))(0 2 0)(破壊的な substitute-if。リスト専用)
nsubstitute-if-not(nsubstitute-if-not 0 #'oddp (list 1 2 3))(1 0 3)(破壊的な substitute-if-not。リスト専用)
get-setf-expansion(get-setf-expansion 'x)setf 展開の 5 値。multiple-value-bind で受け取ります(lite: 変数プレースとアクセサプレース)
nconc(nconc (list 1 2) (list 3 4) (list 5))(1 2 3 4 5)(任意個数のリストを破壊的に連結し、最初の非 nil 引数を返します)
copy-list(copy-list '(1 2 3))(1 2 3)(リストの浅いコピー)
copy-tree(copy-tree '(1 (2 3)))(1 (2 3))(コンスツリーの深いコピー)
sublis(sublis '((a . 1)) '(a b))(1 B)(連想リストのキーに一致する部分木を置き換えた新しい木。:key/:test/:test-not)
nsublis(nsublis '((a . 1)) '(a b))(1 B)(sublis の破壊的な綴り。nsubst を参照)
nreverse(nreverse '(1 2 3))(3 2 1)(各 cdr を繋ぎ替えてリストを破壊的に反転します。戻り値を使ってください)
make-list(make-list 3 :initial-element 0)(0 0 0)(1 つの要素値を共有する n 個のセルのリスト。既定は nil)
union(union '(1 2 3) '(2 3 4))(4 1 2 3)(集合の和。既定では eql 比較で、省略可能な :test/:key キーワードを取ります。結果順序は未規定)
intersection(intersection '(1 2 3) '(2 3 4))(3 2)(集合の積。既定では eql 比較で、省略可能な :test/:key キーワードを取ります。結果順序は未規定)
set-difference(set-difference '(1 2 3) '(2))(3 1)(第1リストにあって第2リストにない要素。既定では eql 比較で、省略可能な :test/:key キーワードを取ります。結果順序は未規定)
set-exclusive-or(set-exclusive-or '(1 2 3) '(2 3 4))(1 4)(対称差。どちらか一方にしかない要素。省略可能な :test/:test-not/:key キーワードを取ります。結果順序は未規定)
adjoin(adjoin 1 '(2 3))(1 2 3)(すでにメンバーでない限り要素を先頭に追加します。既定では eql 比較で、省略可能な :test/:key キーワードを取ります)
subsetp(subsetp '(1 2) '(1 2 3))T(第1リストのすべての要素が第2リストのメンバーであれば真。既定では eql 比較で、省略可能な :test/:key キーワードを取ります)
nunion / nintersection / nset-difference / nset-exclusive-or(nunion (list 1 2) (list 2 3))(3 1 2)(4つの集合演算の破壊的な綴り。CLHSは非破壊的な結果を返すことを認めており、これらはそうします。引数は変更されません)
list*(list* 1 2 '(3 4)), (list* 1 2 3)(1 2 3 4), (1 2 . 3)(先頭の引数を最後の引数の末尾にconsします)
acons(acons 'a 1 nil)((a . 1))((key . value) ペアを連想リストの先頭に追加します)
endp(endp nil), (endp '(1))t, nil(リスト終端テスト。それ以外の値は type-error を通知します)
elt(elt '(a b c) 1)b(0始まりの要素アクセス。リスト・文字列・ベクタに使え、範囲外のインデックスは type-error)
rassoc(rassoc 2 '((a . 1) (b . 2)))(b . 2)(cdrが値に一致する最初のペア、またはnil。既定では eql で比較し、省略可能な :test/:key キーワードを取ります)
rassoc-if(rassoc-if #'oddp '((a . 2) (b . 3)))(b . 3)(cdrが述語を満たす最初のペア、またはnil。省略可能な :key)
rassoc-if-not(rassoc-if-not #'numberp '((a . 1) (b . c)))(b . c)(cdrが述語を満たさない最初のペア、またはnil。省略可能な :key)
pairlis(pairlis '(a b) '(1 2))((a . 1) (b . 2))(キーのリストと値のリストを組にして連想リストを作ります。省略可能な第3引数は末尾に連結されます)
copy-alist(copy-alist '((a . 1)))((a . 1))(連想リストの背骨と各ペアセルをコピーします。キーと値自体は共有されます)
revappend(revappend '(1 2 3) '(4 5))(3 2 1 4 5)(第1リストを反転して第2リストを追加します)
nreconc(nreconc '(1 2 3) '(4 5))(3 2 1 4 5)(破壊的な revappend。(nconc (nreverse x) y) に展開され、第1リストのconsセルを再利用します)
maplist(maplist #'identity '(1 2 3))((1 2 3) (2 3) (3))(連続する末尾に適用し、結果を集めます。任意個のリストを取り、最も短いリストで終了)
mapcon(mapcon (lambda (x) (list (car x))) '(1 2 3))(1 2 3)(連続する末尾に適用し、結果リストを連結します。任意個のリストを取ります)
mapl(mapl #'identity '(1 2 3))(1 2 3)(連続する末尾に副作用のため適用し、最初のリストを返します。任意個のリストを取ります)
sort(sort '(3 1 2) #'<)(1 2 3)(比較述語でリストを破壊的にソートします。安定ではありません)
merge(merge 'list (list 1 3) (list 2 4) #'<)(1 2 3 4)(ソート済みの 2 つのシーケンスを安定にマージ。結果型は coerce が構築する list/vector/string。非破壊)
rplaca(rplaca x val)consセルのcarを破壊的に置き換え、そのセルを返します
rplacd(rplacd x val)consセルのcdrを破壊的に置き換え、そのセルを返します
1+(1+ 41)42((+ x 1) と同じ)
1-(1- 43)42((- x 1) と同じ)
zerop(zerop 0)t
plusp(plusp 3)t
minusp(minusp -3)t
evenp(evenp 4)t
oddp(oddp 3)t
abs(abs -5), (abs -3.14)5, 3.14
min(min 3 5), (min 5 2 8 1)3, 1(可変長引数)
max(max 3 5), (max 5 2 8 1)5, 8(可変長引数)
float(float 42)42.0(doubleに変換)
truncate(truncate 3.7), (truncate -7 2)3, -3(ゼロ方向。除数を与えると除算の商になり、剰余は multiple-value-bind で観測できます)
floor(floor 3.7), (floor 7 2)3, 3(負の無限大方向。除数を与えると除算の商になり、剰余は multiple-value-bind で観測できます)
ceiling(ceiling 3.2), (ceiling 7 2)4, 4(正の無限大方向。除数を与えると除算の商になります)
round(round 3.5), (round 2.5)4, 2(銀行家の丸め。オプションの除数を与えると除算の商を丸めます)
ffloor(ffloor 7 2)3.0(floor と同様ですが、主値は常に浮動小数点数です。剰余は floor が返すものと同じです)
fceiling(fceiling 7 2)4.0(ceiling と同様ですが、主値は常に浮動小数点数です)
ftruncate(ftruncate -7 2)-3.0(truncate と同様ですが、主値は常に浮動小数点数です)
fround(fround 7 2)4.0(round と同様ですが、主値は常に浮動小数点数です)
sqrt(sqrt 16), (sqrt 2)4.0, 1.4142135623730951(常に浮動小数点)
isqrt(isqrt 17)4(整数平方根、実数根の床)
expt(expt 2 10), (expt 2.0 3)1024, 8.0
random(random 100), (random 1.0)[0, 100) / [0.0, 1.0) の範囲の値(結果型は上限に従います。(random 1) は常に 0)。どのバックエンドもプログラム内部の生成器(インタプリタとJVMは ThreadLocalRandom、WASMは組み込みの生成器)から draw し、ホストがある場合はそのエントロピー(Preview 1モードではWASIの random_get、--component モードでは wasi:random@0.3.0)で実行ごとに一度シードされるため、列は実行ごとに異なります
make-random-state(make-random-state t)常に nil -- random-state オブジェクトは存在しません。random は省略可能な state 引数を受理して無視するため、保存して渡し直すイディオムはそのまま動きます
get-universal-time(get-universal-time)1900-01-01 GMTからの秒数。すべてのバックエンドで整数です(WASMはPreview 1では実際のホストクロック、--component モードでは wasi:clocks@0.3.0 を読みます)
encode-universal-time(encode-universal-time 0 0 0 1 1 1970 0)2208988800 -- 分解された時刻要素からユニバーサルタイムへ。タイムゾーン省略時はローカルではなく GMT
decode-universal-time(decode-universal-time 2208988800 0)9 個の分解値 (秒・分・時・日・月・年・曜日・夏時間・ゾーン)。daylight-p は常に nil
get-internal-real-time(get-internal-real-time)経過実時間(ミリ秒)(すべてのバックエンドで整数)
get-internal-run-time(get-internal-run-time)消費した実行時間(ミリ秒)(すべてのバックエンドで整数)
sleep(sleep 0.5)非負の秒数だけブロックして nil を返します(WASM Preview 1 と --no-wasi 以外は本物のホストタイマー。Preview 1 はクロックをビジーウェイト、--no-wasi はシグナル)
lisp-implementation-type lisp-implementation-version software-type software-version machine-type machine-version machine-instance short-site-name long-site-name(lisp-implementation-type)"rontolisp" — 環境問い合わせの定数群。バージョンはビルド固有、software-type は "Unix"、machine-type は対象 ABI("JVM" / "WASM32")、rontolisp が知り得ないものはすべて nil
user-homedir-pathname(user-homedir-pathname)HOME をディレクトリパス名として返す(末尾は区切り文字)。変数が未設定なら nil
invoke-debugger(invoke-debugger c)条件を通知し決して戻らない -- 入り込めるデバッガはどのバックエンドにも無い
compile-file compile-file-pathname remove-method(compile-file "x.lisp")存在して通知する: rontolisp のプログラムは丸ごとコンパイルされ(fasl も、それを指すパス名も無い)、メソッドは第一級オブジェクトではない
exp(exp 0)1.0(どのバックエンドでも fdlibm: インタプリタ/JVM は StrictMath.exp、WASM は同じアルゴリズム)
log(log 1)0.0(自然対数。どのバックエンドでも fdlibm)
sin cos tan(sin 0), (cos 0)0.0, 1.0(どのバックエンドでも fdlibm)
asin acos atan(atan 0)0.0(全バックエンド、どれも fdlibm)
sinh cosh tanh(tanh 0)0.0(全バックエンド -- WASM は 3 つともソフトウェア exp から導出)
asinh acosh atanh(asinh 0), (acosh 1), (atanh 0)0.0(逆双曲線関数、定義域外の実数引数は複素平面へ跨ぐ、どのバックエンドでも同じビット)
cis(cis 0)#C(1.0 0.0)(単位円上の点、常に複素数を返す)
gcd(gcd 12 18), (gcd 24 36 60)6, 12(可変長引数。最大公約数、(gcd) は 0)
lcm(lcm 4 6), (lcm 2 3 4)12, 12(可変長引数。最小公倍数。いずれかの引数が 0 なら 0、(lcm) は 1)
signum(signum -5), (signum 3.5)-1, 1.0(符号。整数/浮動小数点の型を保ちます)
complex(complex 1 2), (complex 1 0)#C(1 2)、1(有理数のゼロ虚部は実数に降格し、浮動小数点数のゼロは複素数のまま残ります)
complexp(complexp #c(1 2))t
realp(realp 1/2)、(realp #c(1 2))t、nil(整数・有理数・浮動小数点数が実数で、複素数は実数ではありません)
realpart(realpart #c(1 2))1(実数はその数自身を答えます)
imagpart(imagpart #c(1 2))、(imagpart 5.5)2、0.0(実数はゼロ、浮動小数点数には浮動小数点数のゼロを答えます)
conjugate(conjugate #c(1 2))#C(1 -2)(実数はその数自身を答えます)
phase(phase 5)、(phase -5)0.0、円周率(複素平面上の偏角で、常に浮動小数点数です)
upgraded-complex-part-type(upgraded-complex-part-type 'integer)INTEGER(real の下位型名はそのまま答え、複合指定子は先頭を答えます)
logand(logand 12 10), (logand 12 10 6)8, 0(可変長引数のビット単位AND。(logand) は -1)
logior(logior 12 10), (logior 1 2 4 8)14, 15(可変長引数のビット単位OR。(logior) は 0)
logxor(logxor 12 10)6(可変長引数のビット単位XOR。(logxor) は 0)
lognot(lognot 5)-6(ビット単位NOT、すなわち1の補数)
logandc1(logandc1 12 10)2(第1引数の補数と第2引数のAND)
logandc2(logandc2 12 10)4(第1引数と第2引数の補数のAND)
logorc1(logorc1 12 10)-5(第1引数の補数と第2引数のOR)
logorc2(logorc2 12 10)-3(第1引数と第2引数の補数のOR)
lognand(lognand 12 10)-9(2引数のNAND。(lognot (logand a b)))
lognor(lognor 12 10)-15(2引数のNOR。(lognot (logior a b)))
logeqv(logeqv 12 10)、(logeqv)、(logeqv 27 22 53)-7、-1、56(可変長引数のビット単位等価。左から畳み込む)
ash(ash 1 4), (ash 255 -4)16, 15(算術シフト。非負のカウントなら左、それ以外は右)
logtest(logtest 1 3), (logtest 1 2)T, NIL(共通して立っているビットがあるか。(not (zerop (logand a b))))
logcount(logcount 7)、(logcount -1)3、0(非負整数の1のビット数、負の整数の0のビット数)
funcall(funcall #'+ 3 4)関数を引数に適用します。関数値(#'f、ラムダ)または関数を指すシンボル((funcall 'car ...))を受け付けます
mapcar(mapcar #'car '((1 2) (3 4)))各要素に関数を適用し、新しいリストを返します
map(map 'list #'+ '(1 2 3) '(10 20 30))(11 22 33)(シーケンス(リスト/文字列)を最短のものまでマッピングし、'list/'string の結果を構築、または副作用のため nil を返す)
mapc(mapc #'print '(1 2 3))副作用のために各要素に関数を適用し、最初のリストを返します。任意個のリストを取り、最も短いリストで終了します
mapcan(mapcan (lambda (x) (list x x)) '(1 2))(1 1 2 2)(関数を適用し結果リストを連結します。任意個のリストを取り、非破壊的な append を使用)
apply(apply #'+ 1 2 '(3 4))10(先頭の引数と展開された最終リストに関数を適用します)
values(values 1 2 3), (multiple-value-list (values 1 2 3))1, (1 2 3) -- 通常の文脈では主値だけが残ります。multiple-value-bind/-list/-call/nth-value はリテラルの (values ...) 呼び出し、多値の組み込み関数(floor ファミリ、gethash、parse-integer、values-list)、(values ...) を返すユーザ関数の全ての値を受け取ります
reduce(reduce #'+ '(1 2 3) :initial-value 0)左畳み込み: (f (f (f init a) b) c)。素の形式 (reduce f list) は最初の要素を初期値に使います。:initial-value キーワード(リテラル)は明示的な初期値を与えます
every(every #'evenp '(2 4 6)), (every #'< '(1 2) '(3 4))すべての要素(の組)で述語が非nilなら t、そうでなければ nil。シーケンスは何個でも渡せ、最短で打ち切ります
some(some #'oddp '(2 4 5)), (some #'> '(1 5) '(3 4))最初の非nilな述語結果、すべての要素(の組)が失敗すれば nil。シーケンスは何個でも渡せます
notany(notany #'evenp '(1 3 5))すべての要素(の組)で述語がnilなら t、そうでなければ nil(some の補)
notevery(notevery #'evenp '(2 4 5))いずれかの要素(の組)で述語がnilなら t、そうでなければ nil(every の補)
symbol-function(symbol-function 'car)シンボルが指す関数を返します(実行時に計算されたシンボルは遅延解決で同じ関数値を返します)
identity(identity 42)42(引数をそのまま返します)
constantly(mapcar (constantly 7) '(a b c))(7 7 7)(引数を何個受け取っても 1 つの固定値を返す関数)
make-hash-table(make-hash-table), (make-hash-table :test 'equal)空のハッシュテーブルを作成します。:test は受け付けられますが情報的なものです(下記の注記を参照)。:size などの他のキーワードは無視されます
gethash(gethash key table), (gethash key table default)key に格納された値、なければ default(省略時はnil)を返します
(setf (gethash key table) v)(setf (gethash "a" h) 1)key の下に v を格納します。placeに対する incf/decf/push と組み合わせて使えます
remhash(remhash key table)key のエントリを削除します。削除されたら t、そうでなければ nil を返します
clrhash(clrhash table)すべてのエントリを削除します。テーブルを返します
hash-table-count(hash-table-count table)エントリ数
hash-table-test(hash-table-test table)検索が実装しているテスト。畳み込むテーブルは EQUALP、それ以外は EQUAL (eql テーブルも構造的に比較する)
hash-table-size(hash-table-size table)格納数 (rontolisp のテーブルは独自の容量を持たない)
hash-table-rehash-size(hash-table-rehash-size table)標準の既定値 1.5 (拡張はホスト側のマップに任せている)
hash-table-rehash-threshold(hash-table-rehash-threshold table)標準の既定値 1.0
hash-table-p(hash-table-p x)x がハッシュテーブルなら t、そうでなければ nil
maphash(maphash (lambda (k v) ...) table)副作用のために各キー/値ペアに関数を呼びます。nilを返します
make-array(make-array 5 :initial-element 0), (make-array (list 2 3))任意の階数の配列を作成します。:initial-element はすべてのセルを設定します(省略時はnil)。:element-type は計算された値でも構いません
aref(aref a i), (aref a i j)指定した添字の要素を返します
(setf (aref a i j) v)(setf (aref a 0 0) 1)添字の位置に v を格納します。placeに対する incf/decf/push と組み合わせて使えます
vector(vector 1 2 3)#(1 2 3)(引数からなる新しい階数1の配列)
svref(svref (vector 10 20 30) 1)20(ベクタの要素アクセス。setf のplaceとしても使えます)
array-dimensions(array-dimensions (make-array (list 2 3)))(2 3)(各次元のサイズのリスト)
array-dimension(array-dimension (make-array (list 2 3)) 1)3(指定した軸のサイズ。0始まり)
array-rank(array-rank (vector 1 2))1(階数2の配列では 2、以降も同様)
array-total-size(array-total-size (make-array (list 2 3)))6(要素の総数)
row-major-aref(row-major-aref (make-array (list 2 3)) 4)フラットな行優先インデックスの要素。階数に依存せず、setf の場所としても使えます
array-row-major-index(array-row-major-index (make-array (list 2 3)) 1 1)4(添字のフラットな行優先インデックス)
array-in-bounds-p(array-in-bounds-p (make-array (list 2 3)) 1 2)t -- シグナルなしの境界検査(非配列・階数不一致・範囲外の添字は nil)
coerce(coerce '(1 2 3) 'vector), (coerce "ab" 'list)#(1 2 3)、(#\a #\b)。'list/'vector/'string と浮動小数点数のファミリ、t、および計算された結果型
fill-pointer(fill-pointer v):fill-pointer ベクタのフィルポインタ(実効長)。setf 可能な場所でもある
array-has-fill-pointer-p(array-has-fill-pointer-p a)配列がフィルポインタを持てば t、そうでなければ nil
adjustable-array-p(adjustable-array-p a)配列が :adjustable で作成されていれば t、そうでなければ nil
array-element-type(array-element-type a)アップグレード後の要素型。アップグレード先がなければ t
vector-push(vector-push x v)フィルポインタの位置に x を格納しインデックスを返す。満杯なら nil
vector-pop(vector-pop v)フィルポインタをデクリメントし、通過した要素を返す
vector-push-extend(vector-push-extend x v &optional ext)vector-push と同様だが満杯時にベクタを拡張する
subtypep(subtypep 'integer 'number)t -- 組み込み型の束と defclass/コンディション階層に対して判定。主値のみで、未知の組は nil。コンパイラはリテラル指定子をコンパイル時に畳み込みます
mask-field(mask-field (byte 4 4) 255)240 -- ldb のフィールドを元の位置のまま返します
deposit-field(deposit-field 0 (byte 4 0) 255)、(deposit-field 5 (byte 4 4) 0)240、0 -- バイトフィールドを newbyte の同じ位置のビットで置き換えます(dpb の下位ビットとは異なります)
ldb-test(ldb-test (byte 4 4) 255)、(ldb-test (byte 4 4) 15)T、NIL -- バイトフィールドに1のビットがあるかどうか
scale-float(scale-float 1.5 3)12.0 -- IEEE の意味論で float × 2^n
float-radix(float-radix 1.0)2 -- 浮動小数点表現の基数(常に2進)
float-sign(float-sign -2.5)、(float-sign -2.5 3.0)-1.0、-3.0 -- 符号を浮動小数点数で(負のゼロは -1.0)、または第2引数の絶対値に第1引数の符号を付けた値
float-digits(float-digits 1.5)、(float-digits 0.0)53、0 -- 2進仮数部の桁数(正規化数では53、非正規化数ではそれより少ない)
decode-float(decode-float 6.5)0.8125、3、1.0 -- [1/2, 1) の仮数部、2 進指数部、符号
integer-decode-float(integer-decode-float 6.5)7318349394477056、-50、1 -- 整数の仮数部、2 進指数部、整数の符号
char-name(char-name #\Space)"Space" -- 図形文字には nil
fdefinition(fdefinition 'car)関数値を返します。symbol-function と同じ
use-package(use-package :mypkg)パッケージを use リストに追加し、その外部シンボルを修飾なしで見えるようにします(リテラルなトップレベル呼び出しはコンパイル時ディレクティブ)
unuse-package(unuse-package :mypkg)use-package の逆操作。パッケージが use リストから外れ、その外部シンボルが修飾なしでは見えなくなります
export(export '(run))シンボルをパッケージの外部シンボルにします(リテラルなトップレベル呼び出しはコンパイル時ディレクティブ)
unexport(unexport 'run)export の逆操作。シンボルは残りますが修飾なしでは見えなくなります
import(import 'other:sym)他パッケージのシンボルを修飾なしでアクセスできるようにします -- :import-from の実行時版(リテラルなトップレベル呼び出しはコンパイル時ディレクティブ)
file-position(file-position s)ファイルストリームの位置(バイナリなら要素単位、文字ならバイト単位)、文字列ストリームの位置(文字単位)。第2引数を与えると位置を移動します。位置を判定できないストリームでは nil
file-length(file-length s)ファイルストリームが開いているファイルのバイト長。他のストリームでは nil
file-write-date(file-write-date "x.txt")ファイルの更新時刻をユニバーサルタイムで返します。判定できない場合は nil(2つのWASMバックエンドでは常に nil)
ensure-directories-exist(ensure-directories-exist "logs/app.log")pathspec のディレクトリ部分を作成して pathspec を返します(2つのWASMバックエンドではシグナルを発生させます)
delete-file(delete-file "notes.txt")指定したファイルを削除して t を返します。ファイルが残る場合は「そもそも無かった」場合も含めてシグナルを発生させます(2つのWASMバックエンドでは ensure-directories-exist と同じ理由でシグナルを発生させます)
rename-file(rename-file "notes.txt" "notes.bak")ファイルをリネーム (移動) し、補完後の新しい名前をパス名として返します。新しい名前は元の名前とマージされるため、ファイル名だけを渡すとディレクトリはそのままです。ファイルが元の場所に残る結果になった場合は「そもそも無かった」場合も含めてエラーになります (delete-file と同じく 2 つの WASM バックエンドではエラー)
make-string-output-stream(make-string-output-stream)新しい文字列出力ストリーム。with-output-to-string が内部で作るものを明示的に作ります
make-string-input-stream(make-string-input-stream string &optional start end)文字列から読み込む入力ストリーム。with-input-from-string が束縛するものを明示的に作ります
get-output-stream-string(get-output-stream-string s)文字列出力ストリームにこれまで書き込まれた内容を返し、ストリームを空にします (CL の仕様どおり)
make-synonym-stream(make-synonym-stream '*standard-output*)すべての操作を、指定した変数が その時点で 保持しているストリームへ転送するストリーム。どのシンボルでも同じなので、後から変数を再束縛すると転送先も変わります
synonym-stream-symbol(synonym-stream-symbol s)シノニムストリームの転送先シンボル
make-broadcast-stream(make-broadcast-stream a b)書き込みのすべてを各コンポーネントへ順に配る出力ストリーム。コンポーネントがなければ書き込みを捨てるシンクです。コンポーネントを持つストリームは Gray ストリームなので出力プロトコル全体が使えます
make-two-way-stream(make-two-way-stream in out)入力と出力の各コンポーネントを1つにまとめたストリーム。読み込みは in から、書き込みは out へ届きます。Gray ストリームなので読み書き両方のプロトコルでディスパッチされます
two-way-stream-input-stream(two-way-stream-input-stream s)2way ストリームの入力コンポーネント
two-way-stream-output-stream(two-way-stream-output-stream s)2way ストリームの出力コンポーネント
make-echo-stream(make-echo-stream in out)読み取ったものを出力コンポーネントにも書き込む 2way ストリーム (対話エコーのイディオム)
echo-stream-input-stream(echo-stream-input-stream s)エコーストリームの入力コンポーネント
echo-stream-output-stream(echo-stream-output-stream s)エコーストリームの出力コンポーネント
make-concatenated-stream(make-concatenated-stream a b)コンポーネントを順に読み込む入力ストリーム。各コンポーネントは端に達すると捨てられます
concatenated-stream-streams(concatenated-stream-streams s)連結ストリームのコンポーネントリスト
broadcast-stream-streams(broadcast-stream-streams s)ブロードキャストストリームのコンポーネントリスト
file-string-length(file-string-length s obj)文字または文字列を書き込んだときに file-position がどれだけ進むか。UTF-8 でのバイト長です
interactive-stream-p(interactive-stream-p s)常に nil -- 端末とパイプを区別できるバックエンドはありません
stream-external-format(stream-external-format s)常に :utf-8 -- リーダーもすべてのライターもこの1つだけを使います
pathnamep(pathnamep #P"/tmp/x")t — 値がパス名 (#P"..." が表す値) かどうか。文字列はパス名ではなく、(typep x 'pathname) と一致します
input-stream-p(input-stream-p s)ストリームから読み込めるときに t
output-stream-p(output-stream-p s)ストリームへ書き込めるときに t
stream-element-type(stream-element-type s)常に character -- すべてのストリームは文字ストリーム
class-of(class-of 42)値のクラスメタオブジェクト。(find-class 'integer) と eq。組み込み値・CLOS・構造体インスタンスのいずれも
type-of(type-of 42)integer -- 型「名」のシンボル。構造体/CLOS インスタンスには構造体/クラスの名前を返し、(class-name (class-of x)) と一致します
simple-condition-format-control(simple-condition-format-control c)コンディションの :format-control スロット、なければ nil
simple-condition-format-arguments(simple-condition-format-arguments c)コンディションの :format-arguments スロット、なければ nil
type-error-datum(type-error-datum c)type-error の datum スロット — 型が誤っていたオブジェクト
type-error-expected-type(type-error-expected-type c)type-error の expected-type スロット
cell-error-name(cell-error-name c)cell-error(unbound-variable、undefined-function、unbound-slot)の name スロット
unbound-slot-instance(unbound-slot-instance c)スロットが未束縛だったオブジェクト
file-error-pathname(file-error-pathname c)失敗したファイル操作に渡されたパス名
print-object(print-object obj stream)プリンタが参照するジェネリック関数。メソッドを定義すると、その型のインスタンスの出力を制御できます
find-restart(find-restart 'retry c)その名前を持つ最内のアクティブなリスタートを第一級オブジェクトとして返します。なければ nil。lite: コンディション引数は無視されます
invoke-restart(invoke-restart :reconnect host)名前(シンボル/キーワード)またはオブジェクトでリスタートを引数付きで起動します。restart-case のリスタートなら制御はその節へ移ります
compute-restarts(compute-restarts)アクティブなすべてのリスタートレコードを最内から順に返します
restart-name(restart-name r)リスタートオブジェクトの名前
muffle-warning(muffle-warning w)warn が確立する muffle-warning リスタートを起動し、印字される前に警告を中止します
abort(abort)最内の abort リスタートを起動します。アクティブなものがなければエラー
continue(continue)最内の continue リスタート(cerror のもの)を起動します。アクティブなものがなければ nil
use-value(use-value v)最内の use-value リスタートを値を渡して起動します。アクティブなものがなければ nil
store-value(store-value v)最内の store-value リスタートを値を渡して起動します。アクティブなものがなければ nil