61
X 3012 : 1998 (ISO/IEC 13816 : 1997)
*most-negative-float*→<float> 名前付き定数
*most-positive-float*の値は,正の無限大に最も近い処理系依存の浮動小数点数とする。
*most-negative-float*の値は,負の無限大に最も近い処理系依存の浮動小数点数とする。
(floatp obj) →真偽値 関数
関数floatpは,objが浮動小数点数(クラス<float>のインスタンス)である場合はtを返し,それ以外の
場合はnilを返す。objは,いかなるISLISPオブジェクトでもよい。
例 (floatp "2.4") ⇒ nil
(floatp 2) ⇒ nil
(floatp 2.0) ⇒ t
(float x) →<float> 関数
関数floatは,xがクラス<float>のインスタンスならばx自身を返し,そうでなければxの浮動小数点近
似値を返す。xが数値でない場合は,エラーが発生する(エラー名domain-error)。
例 (float 0) ⇒ 0.0
(float 2) ⇒ 2.0
(float -2.0) ⇒ -2.0
(float 123456789123456789123456789) ⇒ 1.2345678912345679E26
(floor x) →<integer> 関数
関数floorは,x以下の最大の整数を返す。すなわち,xを負の無限大方向に丸める。xが数値でない場
合は,エラーが発生する(エラー名domain-error)。
例 (floor 3.0) ⇒3
(floor 3.4) ⇒3
(floor 3.9) ⇒3
(floor -3.9) ⇒ -4
(floor -3.4) ⇒ -4
(floor -3.0) ⇒ -3
(ceiling x) →<integer> 関数
関数ceilingは,x以上の最小の整数を返す。すなわち,xを正の無限大方向に丸める。xが数値でない場
合は,エラーが発生する(エラー名domain-error)。
例 (ceiling 3.0) ⇒3
(ceiling 3.4) ⇒4
(ceiling 3.9) ⇒4
(ceiling -3.9) ⇒ -3
(ceiling -3.4) ⇒ -3
(ceiling -3.0) ⇒ -3
(truncate x) →<integer> 関数
――――― [JIS X 3012 pdf 66] ―――――
62
X 3012 : 1998 (ISO/IEC 13816 : 1997)
関数truncateは,0xの間でxに最も近い整数を返す。すなわち,xをゼロ方向に丸める。xが数値でな
い場合は,エラーが発生する(エラー名domain-error)。
例 (truncate 3.0) ⇒3
(truncate 3.4) ⇒3
(truncate 3.9) ⇒3
(truncate -3.4) ⇒ -3
(truncate -3.9) ⇒ -3
(truncate -3.0) ⇒ -3
(round x) →<integer> 関数
関数roundは,xに最も近い整数を返す。xが二つの整数のちょうど中間にある場合は,偶数が採られる。
xが数値でない場合は,エラーが発生する(エラー名domain-error)。
例 (round 3.0) ⇒3
(round 3.4) ⇒3
(round -3.4) ⇒ -3
(round 3.6) ⇒4
(round -3.6) ⇒ -4
(round 3.5) ⇒4
(round -3.5) ⇒ -4
(round 2.5) ⇒2
(round -0.5) ⇒0
11.3 整数クラス
整数オブジェクトは,数学の整数に対応する。整数は,<integer>クラスのインスタン
スとして表現する。
整数だけを扱う算術演算は,整数の大きさに関係なく数学的に正しく動作する。整数の算術演算がハー
ドウェアの精度を超える結果又は中間結果を生成する場合は,ISLISP処理系は,数学的正しさを確実にす
るために必要な演算を,ソフトウェアで擬似的に処理しなければならない。どのような状況でこの擬似的
処理が必要となるかは,処理系定義とする。この擬似的処理が,いつ処理系の能力を超えるかも処理系定
義とする。
整数の書式は,次のいずれかとする。
#B [s]bb...b 各bは “0” 又は “1”
#b [s]bb...b 各bは “0” 又は “1”
#O [s]oo...o 各oは “0” “7” のいずれか
#o [s]oo...o 各oは “0” “7” のいずれか
[s]dd...d 各dは “0” “9” のいずれか
#X [s]xx...x 各xは “0” “9”,“A” “F”,“a” “f” のいずれか
#x [s]xx...x 各xは “0” “9”,“A” “F”,“a” “f” のいずれか
ここで,sは “+” 又は “-” とする。
備考 ISLISPでは,入力機構を制御する変数はないので,上の表現は厳密に整数の表現となる。
(integerp obj) →真偽値 関数
――――― [JIS X 3012 pdf 67] ―――――
63
X 3012 : 1998 (ISO/IEC 13816 : 1997)
関数integerpは,objが整数(クラス<integer>のインスタンス)である場合はtを返し,それ以外の場合
はnilを返す。objは,いかなるISLISPオブジェクトでもよい。
例 (integerp 3) ⇒ t
(integerp 3.4) ⇒ nil
(integerp "4") ⇒ nil
(integerp (a b c)) ⇒ nil
(div z1 z2) →<integer> 関数
(mod z1 z2) →<integer> 関数
関数divは,z1をz2で割った商以下の最大の整数を返す。z2がゼロである場合は,エラーが発生する(エ
ラー名division-by-zero)。
関数modは,z1のz2による整数除算の余りを返す。結果の符号は,z2の符号と一致する。結果は0とz2
との間(0を含み,z2を含まない。)の整数であり,z1とこの結果との差はz2で割り切れる。
divとmodとの関係は次のとおりとする。
(= z1 (+ (* (div z1 z2) 2) (mod z1 z2)))
すなわち,上の評価形式の評価結果は,常にtとなる。
z1又はz2のいずれかが整数でない場合は,エラーが発生する(エラー名domain-error)。
例 (div 12 3) ⇒4
(div 14 3) ⇒4
(div -12 3) ⇒ -4
(div -14 3) ⇒ -5
(div 12 -3) ⇒ -4
(div 14 -3) ⇒ -5
(div -12 -3) ⇒4
(div -14 -3) ⇒4
(mod 12 3) ⇒0
(mod 7 247) ⇒7
(mod 247 7) ⇒2
(mod 14 3) ⇒2
(mod -12 3) ⇒0
(mod -14 3) ⇒1
(mod 12 -3) ⇒0
(mod 14 -3) ⇒ -1
(mod -12 -3) ⇒0
(mod -14 -3) ⇒ -2
(gcd z1 z2) →<integer> 関数
関数gcdは,二つの引数の最大公約数を返す。結果は,非負整数とする。ゼロ以外の引数に対しては,
最大公約数は,z1及びz2の両方の約数である最大の整数とする。
――――― [JIS X 3012 pdf 68] ―――――
64
X 3012 : 1998 (ISO/IEC 13816 : 1997)
z1又はz2のいずれかが整数でない場合は,エラーが発生する(エラー名domain-error)。
例 (gcd 12 5) ⇒1
(gcd 15 24) ⇒3
(gcd -15 24) ⇒3
(gcd 15 -24) ⇒3
(gcd -15 -24) ⇒3
(gcd 0 -4) ⇒4
(gcd 0 0) ⇒0
(lcm z1 z2) →<integer> 関数
関数lcmは,その引数の最小公倍数を返す。gcd及びlcmは,次の関係を満たす。
(= (* (gcd m n) (lcm m n)) (abs (* m n)))
すなわち,上の評価形式の評価結果は,常にtとなる。
z1又はz2のいずれかが整数でない場合は,エラーが発生する(エラー名domain-error)。
例 (lcm 2 3) ⇒6
(lcm 15 24) ⇒ 120
(lcm 15 -24) ⇒ 120
(lcm -15 24) ⇒ 120
(lcm -15 -24) ⇒ 120
(lcm 0 -4) ⇒0
(lcm 0 0) ⇒0
(isqrt z) →<integer> 関数
関数isqrtは,zの正の平方根以下の最大の整数を返す。zが非負整数でない場合は,エラーが発生する
(エラー名domain-error)。
例 (isqrt 49) ⇒7
(isqrt 63) ⇒7
(isqrt 1000000000000002000000000000000) ⇒ 1000000000000000
12. 文字クラス
文字は,<character>クラスのインスタンスとして表現する。これによって,利用者は特
定の文字コードに依存しなくてもよくなる。
ISLISPの文字集合は,少なくとも95個の印字文字と復帰改行文字とを含まなければならない。印字文
字は,スペース文字及び次の94個の文字からなる。
! " # $ % & ( ) * + , - ./ 0 1 2 3 4 5 6 7 8 9 : ; < = > ・
@ 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 [{ |}]
文字リテラルは,#\とそれに続く文字自身,又は文字が名前をもつ場合は#\とそれに続く名前によっ
て表記する。例えば,英文字のAは,“#\A”と表記する。復帰改行文字及びスペース文字は,それぞれ
“newline”及び“space”という名前をもつので,それらは“#\newline”及び“#\space”と表記するこ
――――― [JIS X 3012 pdf 69] ―――――
65
X 3012 : 1998 (ISO/IEC 13816 : 1997)
とができる。(文字の名前では,大文字小文字は区別しない。)
すべての文字は,char<によって順序付けられるが,その順序は,次の順序を満たすものとする。
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
0<1<2<3<4<5<6<7<8<9
ここで,char1<char2は, (char< char1 char2) が真であることを意味する。
(characterp obj) →真偽値 関数
関数characterpは,objが文字(クラス<character>のインスタンス)である場合はtを返し,それ以外の
場合はnilを返す。objは,いかなるISLISPオブジェクトでもよい。
例 (characterp #\a) ⇒ t
(characterp "a") ⇒ nil
(characterp a) ⇒ nil
(char= char1 char2) →真偽値 関数
(char/= char1 char2) →真偽値 関数
(char< char1 char2) →真偽値 関数
(char> char1 char2) →真偽値 関数
(char<= char1 char2) →真偽値 関数
(char>= char1 char2) →真偽値 関数
関数char=は,char1がchar2と同じ文字かどうか検査する。関数char<は,char1がchar2より小さいかど
うか検査する。関数char<=は,char1がchar2以下かどうか検査する。ここで使用される順序は,上で定義
した部分的な順序関係に従い,処理系定義の方式ですべての文字に対する全順序に拡張したものとする。
検査する条件が満たされればtを返し,そうでなければnilを返す。
二つの文字は,それらがchar=でない場合に,char/=とする。二つの文字は,それらがchar<=でない場合
に,char>とする。二つの文字は,それらがchar<でない場合に,char>=とする。
char1又はchar2のいずれかが文字でない場合は,エラーが発生する(エラー名domain-error)。
例 (char= #\a #\a) ⇒ t
(char= #\a #\b) ⇒ nil
(char= #\a #\A) ⇒ nil
(char/= #\a #\a) ⇒ nil
(char< #\a #\a) ⇒ nil
(char< #\a #\b) ⇒ t
(char< #\b #\a) ⇒ nil
(char< #\a #\A) ⇒ nil又はt(処理系定義)
(char< #\* #\a) ⇒ nil又はt(処理系定義)
(char> #\b #\a) ⇒ t
(char<= #\a #\a) ⇒ t
(char<= #\a #\A) ⇒ nil又はt(処理系定義)
(char>= #\b #\a) ⇒ t
――――― [JIS X 3012 pdf 70] ―――――
次のページ PDF 71
JIS X 3012:1998の引用国際規格 ISO 一覧
- ISO/IEC 13816:1997(IDT)
JIS X 3012:1998の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.060 : 情報技術に使用される言語