JIS X 3012:1998 プログラム言語ISLISP | ページ 17

76
X 3012 : 1998 (ISO/IEC 13816 : 1997)
さいかどうか検査する。関数string<=は,string1がstring2以下かどうか検査する。
ここで使用される順序は,文字の比較順序に基づく。
二つの文字列は,それらの長さが同じくlであり,かつ,0<I<lであるすべてのiについて, (char= (elt
string1 i) (elt string2 i))が成り立つ場合に,string=とする。
二つの文字列string1及びstring2は,それぞれの文字が最初に異なる位置において,string1の文字がstring2
の対応する文字と比べてchar<であるか,又は,string1がstring2より長さが短く,かつ,string1中のすべて
の文字がstring2の先頭から一致する場合に,string<とする。
二つの文字列は,それらがstring<であるか又はstring=であれば,string<=とする。
二つの文字列は,それらがstring=でない場合,string/=とする。二つの文字列は,それらがstring<=でな
い場合,string>とする。二つの文字列は,それらがstring<でない場合,string>=とする。
これらの六つの文字列比較関数は,検査する条件が満たされる場合には,処理系定義のnil以外の値を
返し,そうでなければnilを返す。
string1又はstring2のいずれかが文字列でない場合は,エラーが発生する(エラー名domain-error)。
例 (if (string= "abcd" "abcd") nil) ⇒ t
(if (string= "abcd" "wxyz") nil) ⇒ nil
(if (string= "abcd" "abcde") nil) ⇒ nil
(if (string= "abcde" "abcd") nil) ⇒ nil
(if (string/= "abcd" "wxyz") nil) ⇒ t
(if (string< "abcd" "abcd") nil) ⇒ nil
(if (string< "abcd" "wxyz") nil) ⇒ t
(if (string< "abcd" "abcde") nil) ⇒ t
(if (string< "abcde" "abcd") nil) ⇒ nil
(if (string<= "abcd" "abcd") nil) ⇒ t
(if (string<= "abcd" "wxyz") nil) ⇒ t
(if (string<= "abcd" "abcde") nil) ⇒ t
(if (string<= "abcde" "abcd") nil) ⇒ nil
(if (string> "abcd" "wxyz") nil) ⇒ nil
(if (string>= "abcd" "abcd") nil) ⇒ t
(char-index char string [start-position]) →<object> 関数
関数char-indexは,string中のcharの位置を返す。探索は,start-position(文字列の先頭位置を0とする。)
で示される位置から始まる。start-positionの省略時値は0とする。探索に成功した場合に返す値は,string
の先頭からのオフセットであり,探索の開始点からのオフセットではない。charがstring中に存在しなか
った場合は,nilを返す。比較には,関数char=を用いる。
charが文字でない場合又はstringが文字列でない場合は,エラーが発生する(エラー名domain-error)。
例 (char-index #\b "abcab") ⇒1
(char-index #\B "abcab") ⇒ nil
(char-index #\b "abcab" 2) ⇒4
(char-index #\d "abcab") ⇒ nil

――――― [JIS X 3012 pdf 81] ―――――

                                                                                             77
X 3012 : 1998 (ISO/IEC 13816 : 1997)
(char-index #\a "abcab" 4) ⇒ nil
(string-index substring string [start-position]) →<object> 関数
関数string-indexは,string中のsubstringの位置を返す。探索は,start-position(文字列の先頭位置を0
とする。)で示される位置から始まる。start-positionの省略時値は0とする。探索に成功した場合に返す値
は,stringの先頭からのオフセットであり,探索の開始点からのオフセットではない。そのsubstringがstring
中に存在しなかった場合は,nilを返す。部分文字列の存在検査は,二つの文字列の対応する要素について,
char=を順次使用することによって実行される。
substring又はstringのいずれかが文字列でない場合は,エラーが発生する(エラー名domain-error)。
例 (string-index "foo" "foobar") ⇒0
(string-index " bar " " foobar") ⇒3
(string-index " FOO " " foobar") ⇒ nil
(string-index " foo " " foobar" 1) ⇒ nil
(string-index " bar " " foobar" 1) ⇒3
(string-index " foo" "") ⇒ nil
(string-index "" "foo”) ⇒0
(string-append string*) →<string> 関数
関数string-appendは,各stringの文字の並びを連結して得られる文字列を返す。stringが一つも与えられ
なかった場合は,""を返す。stringのいずれかが文字列でない場合は,エラーが発生する(エラー名
domain-error)。
この関数は,引数を変更しない。結果が引数stringと構造を共有するかどうか,更にどの場合に共有す
るかは,処理系定義とする。
文字列の割当てができない場合は,エラーが発生する(エラー名cannot-create-string)。
例 (string append "abc" "def") ⇒ "abcdef"
(string-append "abc" "abc") ⇒ "abcabc"
(string-append "abc" "") ⇒ "abc"
(string-append "" "abc") ⇒ "abc"
(string-append "abc" "" "def") ⇒ "abcdef"

17. 列

 クラス<basic-vector>又はクラス<list>に属するオブジェクトを総称して,列 (sequence) と呼ぶ。
(length sequence) →<integer> 関数
関数lengthは,sequenceの長さを0以上の整数として返す。
sequenceがベクタであれば,lengthは,その長さを返す。
sequenceがリストであれば,結果は,リスト中の要素数とする。要素自身がリストである場合,この部
分リスト中の要素は,数えない。ドットリストの場合,lengthは,リストの最上位のコンスの個数を返す。
例えば,(a b. c) ≡ (cons a (cons b c)) であることから, (length (a b . c)) ⇒ 2とする。
sequenceがベクタ又はリストでない場合は,エラーが発生する(エラー名domain-error)。
例 (length (a b c)) ⇒3

――――― [JIS X 3012 pdf 82] ―――――

78
X 3012 : 1998 (ISO/IEC 13816 : 1997)
(length (a (b) (c d e))) ⇒3
(length ()) ⇒0
(length (vector a b c)) ⇒3
(elt sequence z) →<object> 関数
列sequence及び0<z< (length sequence) を満たす整数zを与えられると,関数eltは,添字zで示される
sequenceの要素を返す。添字は,0から始まる。すなわち,z=0は,第1要素を指示する。zが,上の範囲
外の整数である場合は,エラーが発生する(エラー名index-out-of-range)。
sequenceがベクタ若しくはリストでない場合又はzが整数でない場合は,エラーが発生する(エラー名
domain-error)。
例 (elt (a b c) 2) ⇒c
(elt (vector a b c) 1) ⇒b
(elt "abc" 0) ⇒ #\a
(setf (elt sequence z) bj) →<object> 特殊形式
(set-elt obj sequence z) →<object> 関数
これらは,eltで示される場所指定を受け取り,この場所をobjで更新する。返り値は,objとする。整
数zは,0<z< (length sequence) を満足しなければならない。
zが正しい添字の範囲外の整数である場合は,エラーが発生する(エラー名index-out-of-range)。sequence
がベクタ若しくはリストでない場合又はzが整数でない場合は,エラーが発生する(エラー名domain-error)。
objは,いかなるISLISPオブジェクトでもよい。
例 (let ((string (create-string 5 #\x)))
(setf (elt string 2) #\0)
x) ⇒ "xx0xx"
(subseq sequence z1 z2) →列 関数
列sequenceと0<z1<z2< (length sequence) を満たす二つの整数z1及びz2とを与えられると,関数subseqは,
長さがz2−z1で添字がz1以上z2未満の要素を含む部分列を返す。部分列は,新たに割り当てられ,sequence
と同じクラスに属する。
要求された部分列の割当てができない場合は,エラーが発生する(エラー名cannot-create-sequence)。z1
又はz2が上の範囲外である場合は,エラーが発生する(エラー名index-out-of-range)。sequenceがベクタ若
しくはリストでない場合,z1が整数でない場合又はz2が整数でない場合は,エラーが発生する(エラー名
domain-error)。
例 (subseq "abcdef" 1 4) ⇒ "bcd"
(subseq (a b c d e f) 1 4) ⇒ (b c d)
(subseq (vector a b c d e f) 1 4)
⇒ #(b c d)
(map-into destination function sequence*) →列 関数

――――― [JIS X 3012 pdf 83] ―――――

                                                                                             79
X 3012 : 1998 (ISO/IEC 13816 : 1997)
関数map-intoは,列sequence中の各要素に順次functionを適用し,それらの結果が含まれるように
destinationを破壊的に変更する。destinationを返す。
destination及び各sequenceがすべて同じ長さでない場合,(いずれかのsequence又はdestinationで)最も
短い列が終わったときに,繰返しが終了する。
functionの呼出しは左から右へと進む。したがって,functionが副作用をもつ場合,利用者はこの順序に
依存してよい。
destinationがベクタ又はリストでない場合は,エラーが発生する(エラー名domain-error)。sequenceの
いずれかがベクタ又はリストでない場合は,エラーが発生する(エラー名domain-error)。
例 (setq a (list 1 2 3 4)) ⇒ (1 2 3 4)
(setq b (list 10 10 10 10)) ⇒ (10 10 10 10)
(map-into a #+ a b) ⇒ (11 12 13 14)
a ⇒ (11 12 13 14)
b ⇒ (10 10 10 10)
(setq k (one two three)) ⇒ (one two three)
(map-into a #cons k a) ⇒ ((one.1)(two.12)(three.13)14)
(let ((x 0))
(map-into a
(lambda () (setq x (+ x 2))))) ⇒ (2 4 6 8)
a ⇒ (2 4 6 8)

18. ストリームクラス

 ストリームは,<stream>クラスのインスタンスとする。これらは,データの入力
元又は出力先の役割を果たすオブジェクトとする。
(streamp obj) →真偽値 関数
関数streampは,objがストリーム(クラス<stream>のインスタンス)である場合はtを返し,それ以外
の場合はnilを返す。objは,いかなるISLISPオブジェクトでもよい。引数がクラス<stream>のインスタン
スである場合,そのストリームが開いていても閉じていても,streampは,影響を受けない。
例 (streamp (standard-input)) ⇒ t
(streamp ()) ⇒ nil
(open-stream-p obj) →真偽値 関数
関数open-stream-pは,objが開いているストリームである場合はtを返し,それ以外の場合はnilを返す。
(input-stream-p obj) →真偽値 関数
関数input-stream-pは,objが入力操作を扱うことができるストリームである場合はtを返し,それ以外
の場合はnilを返す。
例 (input-stream-p (standard-input)) ⇒ t
(input-stream-p (standard-output)) ⇒ nil
(input-stream-p (a b c)) ⇒ nil
(output-stream-p obj) →真偽値 関数

――――― [JIS X 3012 pdf 84] ―――――

80
X 3012 : 1998 (ISO/IEC 13816 : 1997)
関数output-stream-pは,objが出力操作を扱うことができるストリームである場合はtを返し,それ以外
の場合はnilを返す。
例 (output-stream-p (standard-output)) ⇒ t
(output-stream-p (standard-input)) ⇒ nil
(output-stream-p "hello") ⇒ nil

――――― [JIS X 3012 pdf 85] ―――――

次のページ PDF 86

JIS X 3012:1998の引用国際規格 ISO 一覧

  • ISO/IEC 13816:1997(IDT)

JIS X 3012:1998の国際規格 ICS 分類一覧