この規格ページの目次
51
X 3012 : 1998 (ISO/IEC 13816 : 1997)
character integer float symbol string general-vectorlist
character = I − I(3) −(4) − −
integer I = X − X(5) − −
float − −(1) = − X(6) − −
symbol − − − = I(3) − −
string − X(2) X(2) I(3) = X(7) X
general-vector − − − − − = X
list − − − − − X =
備考 = これは,恒等関数とする。
X この型変換は,用意される。
X(2) この型変換が試みられ,文字列が変換先クラスの数値のテキスト表現を含
まない場合は,エラーが発生する。その他すべての点において,これは
parse-numberと同じとする。
X(5) これは,D書式指示と同じでよい。
X(6) これは,G書式指示と同じでよい。
X(7) これは,文字列が実装上ベクタであるならば恒等関数とする。
I この型変換は用意されるが,その定義は処理系定義とする。
I(3) この型変換は用意されるが,その定義は処理系定義とする。型変換は,処
理系におけるエスケープ不要の英文字(10.1.2参照)に依存する。
− この型変換を行おうとした場合は,エラーが発生する。
−(1) この型変換を必要とする場合は,floor,ceiling,round又はtruncateのいず
れかの関数を代わりに使用すればよい。
−(4) この型変換を必要とする場合は,代わりに (create-string 1 obj) を使用すれ
ばよい。
処理系が,処理系定義のクラスを用意している場合は,それらのクラス名に対して,convertを使用して
処理系定義の型変換を提供してもよい。
例 (convert 3 <float>) ⇒ 3.0
(convert "abc" <general-vector>) ⇒ # (#\a #\b #\c)
(convert #(a b) <list>) ⇒ (a b)
10. 記号クラス
記号は,クラス<symbol>のインスタンスとする。記号は,名前付き (named) でも名前な
し (unnamed) でもよい。記号の名前は,入出力時に記号を識別するために使用されることから,しばしば
印字名 (print name) と呼ばれる。記号は,属性 (property) をもつことができる。
(symbolp obj) →真偽値 関数
関数symbolpは,objが記号(クラス<symbol>のインスタンス)である場合はtを返し,それ以外の場合
はnilを返す。objは,いかなるISLISPオブジェクトでもよい。
例 (symbolp a) ⇒ t
(symbolp "a" ) ⇒ nil
(symbolp #\a) ⇒ nil
――――― [JIS X 3012 pdf 56] ―――――
52
X 3012 : 1998 (ISO/IEC 13816 : 1997)
(symbolp t) ⇒ t
(symbolp t) ⇒ t
(symbolp nil) ⇒ t
(symbolp nil) ⇒ t
(symbolp ()) ⇒ t
(symbolp *pi*) ⇒ t
(symbolp *pi*) ⇒ nil
10.1 記号名
記号は,名前付き (named) 又は名前なし (unnamed) のいずれかとする。
名前から記号への写像がある。異なる記号(eqが真でない記号)は,常に異なる名前をもつ。このよう
な写像は,名前なしの記号には定義されない。
記号の名前は,文字列として表現される。
10.1.1 記号の表記
記号の名前を構成する文字は,1.4による。
名前付き記号は,縦棒 (“|”) で囲まれた印字名で示される。しかし,記号が次の二つの条件を満たす
場合は,縦棒で囲む必要はない。
a) 記号の印字名が,エスケープ不要の英文字(10.1.2参照)又はそれらと次の追加文字だけからなると
き。
0 1 2 3 4 5 6 7 8 9 + - < > / * = ・ ! $ % [ ] ^ [{}]
(この集合は,処理系定義の追加の文字を含んでもよい。)
b) 記号の印字名の最初の文字が,通常の英文字か又は次の文字のとき。
< > / * = ・ ! $ % [ ] ^ [{}] ~
(この集合は,処理系定義の追加文字を含んでもよい。)
さらに,次の記号は,縦棒で囲まなくてもよい。
+ - 1+ 1-
記号名が縦棒を含む場合は,縦棒の前に逆斜線 “\” を置かなければならない。記号名が逆斜線を含む
場合は,その逆斜線の前に別の逆斜線を置かなければならない。例えば, “|\\\\\|\\\||” は,逆
斜線,逆斜線,縦棒,逆斜線,縦棒という五つの文字からなる名前の記号を表す。
備考 すべての必すの記号は縦棒なしで書くことができる。
記号の名前が,コロン (:) 又はアンパサンド (&) を含み得るかどうかは処理系定義とする。したがって,
&rest,: rest及びその他のキーワード(例えば,: before)が,記号として表されるか又は何か別のものと
して表されるかは処理系定義とする。
10.1.2 記号名における大小文字
記号のテキスト表現が縦棒で囲まれていないとき,テキスト表現内の英
文字の大文字小文字の相違は無視される。したがって,次のテキスト表現は,同じ記号を表す。
foo foO fOo fOO Foo FoO FOo FOO
内部的には記号の印字名内の大文字小文字は保存され,区別される。例えば,|FOO|と|foo|とは,いかな
る処理系においても同じ記号ではない。しかし,入力機構は,名前が縦棒で囲まれていない記号に対して
は,大文字小文字を正規化する。したがって,fooとFOOとは,同じ記号を表すことになる。しかし,こ
の記号が|foo|又は|FOO|のどちらであるかは処理系定義とする。
各処理系は,英文字の変換方向 (neutral alphabetic case) と呼ばれる処理系定義の属性をもつ。これは,
“小文字へ”又は“大文字へ”のいずれかとする。英文字の変換方向が“小文字へ”である処理系の場合,
エスケープ不要の英文字 (neutral alphabetic character) は,次のとおりとする。
――――― [JIS X 3012 pdf 57] ―――――
53
X 3012 : 1998 (ISO/IEC 13816 : 1997)
a b c d e f g h i j k l m n o p q r s t u v w x y z
そうでない場合(英文字の変換方向が“大文字へ”である処理系では),エスケープ不要の英文字は,次
のとおりとする。
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
英文字の変換方向が“小文字へ”である処理系の場合は,foo,FOO及び|foo|は同じ記号を表す。そうで
ない場合は,foo,FOO及び|FOO|が同じ記号を表す。
処理系は,エスケープ不要の英文字の集合に処理系定義の文字を追加してもよい。
10.1.3 nil及び()
記号nilは偽値及び空リストの両方を表し,()と表記してもよい。
10.2 記号属性
記号の属性 (property) は,属性名 (property name) と属性値 (property value) との間の名
前による関連付けとする。記号sに属性名pが関連付けられている場合,sは属性pをもつという。
(property symbol property-name [obj]) →<object> 関数
関数propertyは,記号symbolに関連付けられたproperty-nameという名前の属性の値を返す。symbolが
property-nameという名前の属性をもたなければ,obj(省略時値はnil)を返す。
symbol又はproperty-nameのいずれかが記号でない場合は,エラーが発生する(エラー名domain-error)。
objは,いかなるISLISPオブジェクトでもよい。
例 (property zeus daughter) ⇒ athena
(setf (property symbol property-name) bj) →<object> 特殊形式
(set-property obj symbol property-name) →<object> 関数
これらは,objを記号symbolに関連付けられたproperty-nameという名前の属性の新しい値とする。
property-nameという名前の属性が既に存在するならば,それに対応する属性値を置き換える。そうでな
ければ,新しい属性を生成する。objを値として返す。
symbol又はproperty-nameのいずれかが記号でない場合は,エラーが発生する(エラー名domain-error)。
objは,いかなるISLISPオブジェクトでもよい。
例 (setf (property zeus daughter) thena) ⇒ athena
(set-property athena zeus daughter) ⇒ athena
(remove-property symbol property-name) →<object> 関数
関数remove-propertyは,記号symbolに関連付けられた属性property-nameを削除し,属性が存在する場
合は削除された属性の属性値を返す。そのような属性が存在しない場合は,nilを返す。
symbol又はproperty-nameのいずれかが記号でない場合は,エラーが発生する(エラー名domain-error)。
例 (remove-property zeus daughter) ⇒ athena
10.3 名前なしの記号
(gensym) →<symbol> 関数
関数gensymは,名前なしの記号を生成して返す。gensymは,マクロを書くのに有用となる。名前なし
の記号は,識別子によって指定することはできない。
例 (defmacro twice (x)
(let ((v (gensym)))
(let((,v ,x)) (+ ,v ,v)))) ⇒ twice
――――― [JIS X 3012 pdf 58] ―――――
54
X 3012 : 1998 (ISO/IEC 13816 : 1997)
(twice 5) ⇒ 10
11. 数値クラス
クラス<number>は,<float>及び<integer>という,重なりのない下位クラスをもつ。
11.1 数値クラス
(numberp obj) →真偽値 関数
関数numberpは,objが数値(クラス<number>のインスタンス)である場合はtを返し,それ以外の場
合はnilを返す。objは,いかなるISLISPオブジェクトでもよい。
例 (numberp 3) ⇒ t
(numberp -0.3) ⇒ t
(numberp (a b c)) ⇒ nil
(numberp "17") ⇒ nil
(parse-number string) →<number> 関数
関数parse-numberは,string内の文字を(readのように)走査し,結果の字句要素が数値のテキスト表
現である場合は,その数値を返す。
stringが文字列でない場合は,エラーが発生する(エラー名domain-error)。stringが数値のテキスト表現
でない場合は,エラーが発生する(エラー名cannot-parse-number)。
例 (parse-number "123.34") ⇒ 123.34
(parse-number "#XFACE") ⇒ 64206
(parse-number "-37.") エラーが発生する。
(parse-number "-.5") エラーが発生する。
これは,浮動小数点数の表記において,小数点の前後の両方
に,少なくとも一つの数字が必要であるためである。
(= x1 x2) →真偽値 関数
関数=は,x1がx2と数学的に等しい値をもつ場合はtを返し,それ以外の場合はnilを返す。x1又はx2の
いずれかが数値でない場合は,エラーが発生する(エラー名domain-error)。
備考 =はeqlとは異なる。=は引数の数学的な値だけ(すなわち,数値としての等価性)を比較する
が,eqlは表現をも比較する。
例 (= 3 4) ⇒ nil
(= 3 3.0) ⇒ t
(= (parse-number "134.54") 134.54) ⇒ t
(= 0.0 -0.0) ⇒ t
(/= x1 x2) →真偽値 関数
関数/=は,x1とx2が数学的に異なる値をもつ場合はtを返し,それ以外の場合はnilを返す。x1又はx2
のいずれかが数値でない場合は,エラーが発生する(エラー名domain-error)。
例 (/= 3 4) ⇒ t
(/= 3 3.0) ⇒ nil
――――― [JIS X 3012 pdf 59] ―――――
55
X 3012 : 1998 (ISO/IEC 13816 : 1997)
(/= (parse-number "134.54") 134.54) ⇒ nil
(>= x1 x2) →真偽値 関数
(<= x1 x2) →真偽値 関数
(> x1 x2) →真偽値 関数
(< x1 x2) →真偽値 関数
関数>=は,x1がx2より大きいか=であるならtを返す。関数<=は,x1がx2より小さいか=であるならtを
返す。関数>は,x1がx2より大きければtを返す。関数<は,x1がx2より小さければtを返す。
これらの関数は,引数の数学的な値を比較する。x1又はx2のいずれかが数値でない場合は,エラーが発
生する(エラー名domain-error)。
例 (> 2 2) ⇒ nil
(> 2.0 2) ⇒ nil
(> 2 -10) ⇒ t
(> 100 3) ⇒ t
(< 2 2) ⇒ nil
(< 1 2) ⇒ t
(>= 2 2) ⇒ t
(>= 2.0 2) ⇒ t
(>= -1 2) ⇒ nil
(<= -1 2) ⇒ t
(<= 2 -1) ⇒ nil
この節の残りの定義において,<float>への型変換は,float又は (convert z <float>) によるものと同じと
する。
(+ x*) →<number> 関数
(* x*) →<number> 関数
関数+及び関数*は,それぞれ引数の和及び積を返す。すべての引数が整数なら結果は整数とする。いず
れかの引数が浮動小数点数なら,結果は浮動小数点数とする。引数がない場合は,+は0を,*は1を返す。
xのいずれかが数値でない場合は,エラーが発生する(エラー名domain-error)。
例 (+ 12 3) ⇒ 15
(+ 1 2 3 ) ⇒6
(+ 12 3.0) ⇒ 15.0
(+ 4 0.0) ⇒ 4.0
(+) ⇒0
(* 12 3) ⇒ 36
(* 12 3.0) ⇒ 36.0
(* 4.0 0) ⇒ 0.0
(* 2 3 4) ⇒ 24
(*) ⇒1
――――― [JIS X 3012 pdf 60] ―――――
次のページ PDF 61
JIS X 3012:1998の引用国際規格 ISO 一覧
- ISO/IEC 13816:1997(IDT)
JIS X 3012:1998の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.060 : 情報技術に使用される言語