@ t 関数[#!expr] <説明> 一番新しいエラー発生時のバックトレースのリストを返す。異なるエラーが 生じない限りは、同じ値を返す。つまり、カレントプロセスのインスタンス 変数 :backtrace から情報を受け取る。 <例> a -> Error at top-exec: unbound-variable a nil (t) -> ((unbound-variabl a nil) bas:as-shadow vanilla-error backtrace-stopper) @ tagbody 関数[#!subr] <説明> 形式 : tagbody &rest body body がリストならそれをフォームとみなし、リスト以外ならタグとみなす。 そしてフォームだけを評価していき、最後のフォームの評価が終わると、その 値を返す。しかし、評価の途中で go によってあるタグへのジャンプが起こる と、そのタグのすぐ後のフォームから評価を再開する。 <例> (!true nil) -> nil (tagbody (when true (go tag)) (prins 'a) tag (prins 'b) (prins 'c)) -> abcc @ common:tagbody 関数[#!macro] <説明> 形式 : common:tagbody &rest body body がリストならそれをフォームとみなし、リスト以外ならタグとみなす。 そして,フォームだけを評価していき、最後のフォームの評価が終わると nil を返す。しかし、評価の途中で go によってあるタグへのジャンプが起こると、 そのタグのすぐ後のフォームから評価を再開する。 <例> (!true '(a b)) -> (a b) (common:tagbody (when true (go tag)) (prins 'a) tag (prins 'b) (prins 'c)) -> bcnil @ sys:tagep 関数[#!subr] <説明> 形式 : sys:tagep arg arg の拡張タグビットがオンならば t を返し、それ以外なら nil を返す。 <例> (!aa (sys:set-tage "a")) -> "a" (sys:tagep aa) -> t @ tailp 関数[#!subr] <説明> 形式 : tailp sublist list list に対して cdr を連続して適用し、そのうちの 1 つが sublist と eq に なった時、t を返す。 <例> x = (1 2 3)とする (tailp x x) -> t (tailp (cddr x) x) -> t (tailp nil x) -> t (tailp (list 2 3) x) -> nil (equalであるが eqでない) @ talk 関数[#!expr] <説明> 形式 : talk line-num ターミナル line-num へメッセージを送る。talking-to ルーチンを呼ぶ。 ユーザは別のユーザと端末を通して会話可能。line-name で相手のユーザの ログインネームまたはターミナルナンバーを指定する。相手が reply を使って 応答してくれば、端末を通しての会話が可能。終了は、ctrl + z を入力。 <例> talk 2 以下入力した内容がターミナル No.2 へ出力される。 @ tan 関数[#!subr] <説明> 形式 : tan number number (単位:ラジアン) に対する正接値 (tangent) を返す。 <例> (tan pi) -> -0.0f0 (tan [pi / 4]) -> 1.0f0 @ tanh 関数[#!subr] <説明> 形式 : tanh number number (単位:ラジアン) に対する双曲的正接値を返す。 <例> (tanh 1.0f0) -> 0.761594155955764f0 (tanh 0.50f) -> 0.46211715726001f0 @ sys:tao-package 定数 <説明> パッケージ "tao" へのポインタ。"tao" は、パッケージ "univ" の サブパッケージ。"tao" には、パッケージ "bas" に同じ名前の TAO 関数が 登録されている。 <例> sys:tao-package -> {vector}32256(package . 12) @ tao-standard-readtable 変数 <説明> TAO の標準読み込み表のポインタをさす。 *readtable* = tao-standard-readtable @ tao-standard-sysmode 変数 <説明> この変数の値は、TAO の標準システムモードを指定する。すなわち システムモードを指定するキーワード引数を以下のようにセットする。 :car-nil-error -------- t :cdr-nil-error -------- nil :one-char-string ------ nil :common-lisp ---------- nil :negation-as-failure --- nil <例> tao-standard-sysmode -> 2052 @ tconc 関数[#!subr] <説明> 形式 : tconc list1 list2 list1 と list2 をこの順でコピーしないで連結する。list1 の最後のセルは、 list2 に結合される。ただし list1 が成長リストである場合、nconc より実行 が速くなる。 <例> (tconc '(a) '(b)) -> (a b) (tconc '(a) ()) -> (a) @ tcons 関数[#!subr] <説明> 形式 : tcons list new-value new-value を、成長リスト list の最後の要素として挿入し、その結果を返す。 list が成長リストでない場合は、list を成長リストとする。list がどのよう な長さでも実行時間は一定。 <例> 通常のリストを成長リストにしたり、また成長リストを通常のリストにし たりする方法には以下のような方法がある。 (!g (tcons nil 1)) -> (1) ここで g=(1) 成長リスト (tcons g 2) -> (1 2) ここで g = (1 2) 成長リスト (tcons g 3) -> (1 2 3) ここで g = (1 2 3) 成長リスト (!g (peelinv g)) -> (1 2 3) ここで g = (1 2 3) 通常のリスト (!g (tcons (list 1 2 3 4 5) 100)) -> (1 2 3 4 5 100) 成長リスト @ tdir 関数[#!expr] <説明> 形式 : tdir &opt pathname output-stream プリントする順序を除いて、vdir と同じ。pathname での指定にマッチする 全てのファイルについての情報が、それらのファイルが最後に修正された (新たな作成も含む) 時間順に、プリントされる。 <例> (!bb (open "bon.bon" :direction :output)) -> {udo}1314792file-stream (tdir "bs:" bb) -> (tdir "") (close bb) -> ok ディレクトリ のファイル群が "bon.bon" に書き込まれる。 @ tek4404-terminal クラス <説明> インスタンスが tek4404 ターミナルのクラス。 @ tenth 関数[#!macro] <説明> 形式 : tenth list list の 10 番目の要素の値を返す。 <例> (tenth '(0 1 2 3 4 5 6 7 8 9 10 11)) -> 9 @ terminal 関数[#!expr] <説明> 形式 : terminal &opt type &rest mode ターミナルタイプが type 、ターミナルモードが mode であるターミナル ストリームを作成し、*standard-input* 、*standard-output* に代入する。 type は vt100,vt200,cit101e,cit600,cit6001,tek4404,pc98k,dcu のどれかを 指定する。type の既定値は cit101e 。mode は :more か :no-more、:dumb か :no-dumb、:screen か :no-screen、wrap か :no-wrap を指定する。 mode の既定値は :no-dumb、:no-screen、:no-wrap、:more 。 @ terminal-mode 関数[#!expr] <説明> ターミナルのモードを返す。ターミナルがターミナルストリームに結びつい ていないときは、nil を返す。 <例> (terminal-mode) -> (more 24 wrap nil dumb () screen nil local-echo nil) @ terminal-ports 定数 <説明> ターミナル番号のリスト。例えば ELIS では (0 1 2 3 4 5 6 7) 。 @ terminal-stream クラス <説明> インスタンスがターミナルストリームであるクラス。 @ terminal-stream-p 関数[#!expr] <説明> 形式 : terminal-stream-p stream stream がターミナルストリームのとき stream を返し、そうでなければ、nil を返す。 @ terminal-type 関数[#!expr] <説明> *standard-input* と *standard-output* のターミナルタイプを返す。 ターミナルがターミナルストリームに結びついているとき、*standard-input* と *standard-output* のクラス名称を返す。 terminal-type は、vt100, vt200, cit101e, cit600, cit6001, tek4404, pc98k, dcu のどれかが返る。terminal でターミナルタイプが設定されていな ければ、ファンダメンタルストリームを返す。 @ terpri 関数[#!subr] <説明> 形式 : terpri &opt stream stream に改行文字と復帰文字を出力し、t を返す。stream が省略されると、 *standard-output* が使われる。terpri は、crlf と同じ。 @ the 関数[#!expr] <説明> 形式 : the type form form を評価し、その結果がデータ型 type と一致した場合は評価結果を返す (一致しなかった場合はエラー)。 <例> (the string(copy-seq x)) この結果は文字列 (the integer(+ x 3)) + の結果は整数 (+ (the integer x) 3) x の値は整数 @ third 関数[#!macro] <説明> 形式 : third list list の 3 番目の要素の値を返す。 <例> (third '(0 1 2 3 4 5 6 7 8 9 10 11)) -> 2 @ throw 関数[#!subr] <説明> 形式 : throw tag val 最も内側にある catch, catcher, catcher-case から強制的に脱出させる。 tag を評価し、その値と eq なキャッチャーを最後に設定した catch 式の実行 を終了し、val をその catch 式の値とする。val が空白のとき、未定義値 {undef}0 を tag に与える。 <例> (catch 'a (throw 'a 3)) -> 3 y = 2 a = (b c) (catch a (seq (!x 1) (throw a y) (!z 3))) -> 2 x = 1 y = 2 z = unbound (catch a (seq (!x 1) (throw '(b c) y) (!z 3))) はエラー。 @ throwablep 関数[#!subr] <説明> 形式 : throwablep tag tag が catch, catcher, catcher-case のいずれかにあるキャッチタグとして 使われた場合は t を返し、それ以外なら nil を返す。 @ time 関数[#!expr] <説明> 形式 : time internal-time 内部時間形式の時間 internal-time を、時間, 分, 秒, と unit (20 ミリ秒) のリストとして表示する。 internal-time の既定値は、get-internal-real-time の返す値。 unit については、定数 internal-time-units-per-second を参照。 <例> (time) -> (1 55 44 44) (time (get-internal-run-time)) -> (0 3 21 54) @ times 関数[#!subr] <説明> 形式 : times &rest number1 number2 ... numberN number1 number2 ... numberN の積を返す。 <例> (times) -> 1 (times 2 3 4) -> 24 @ togap 関数[#!subr] <説明> 形式 : togap arg arg がトガ ^ のついた式なら t を返し、そうでなければ nil を返す。 <例> (togap '^(x y `z)) -> t @ trace 関数[#!expr] <説明> 形式 : trace func func を変数 *traced-fns* の値とする。func は、トレースされるべき関数と なる。func が呼ばれると、tracer が自動的に呼ばれ、func の実行についての 種々の情報をプリントする。trace は、種々のサブ関数を指定できる。 :entry 、:entry-do 、:break は、トレースされる関数が適用される前に実行 されることを指定する。 :exit 、:exit-do 、:exit-break は、トレースされ た関数を出る直前に実行されることを指定する。 :both 、:both-do 、 :both-break は、両方で実行されることを指定する。 <例> (de my-car (x) (car x)) -> my-car (trace my-car) -> (my-car) (my-car '(p q r) -> 1 (my-car [x = (p q r)]) 1 (my-car p) p トレース結果についての説明 1 行目の左端の 1 はトレースのレベルを示す。 は、その後にくるものが、 トレースされる関数 my-car が適用される前の値であることを表す。 [x = (p q r)] は、my-car の引数 x の値が (p q r) であることを表す。 2 行目の左端の 1 もトレースのレベルを示す。 は、その後にくるものが、 トレースされた関数を出る直前の値であることを表す。p は、トレースの一番 上のレベルでの my-car の評価結果である。 (de my-car (x) (car x)) -> my-car (trace (my-car :entry (numberp (car x)) :exit (stringp (car x)))) -> my-car (my-car '(10 20 30)) 1 (my-car [x = (10 20 30)]) 10 (my-car '("10" "20" "30")) 1 (my-car "10") 10 トレースされる関数が適用される前に、フォーム (numberp (car x)) が評価さ れる。評価結果が nil でなければ、 を含む行がプリントされ、 nil なら、 その行はプリントされない。さらに、トレースされた関数をでる直前に、フォ ーム (stringp (car x)) が評価される。評価結果が nil でなければ、 を含む行がプリントされ、nil であれば、その行はプリントされない。 @ tree-equal 関数[#!macro] <説明> 形式 : tree-equal object1 object2 :test :test-not object1 と object2 を比較し、同一の葉をもった準同形の木であれば t を 返す。 <例> (tree-equal '(2 3) (cdr '(1 2 3))) -> t @ trim 関数[#!subr] <説明> 形式 : trim &rest var list form1 form2 ... formN まず、list の第 1 要素を var として form1 form2 ... formN を順に評価 する。次に、list の第 2 要素を var として form1 form2 ... formN を順に 評価する。以下、list の最後の要素までこれを繰り返す。そして、最後の フォーム formN の評価結果の値をすべて調べ、それが non-nil であった時の、 最新の var の値を並べてリストとして返す。 <例> (trim i '(1 2 3 4 5 6 7) (oddp i)) -> (1 3 5 7) (trim i '(1 2 3 4 5) (!!1+ !i) (evenp i)) -> (2 4 6) (trim i (index 1 10) (oddp i) (evenp i)) -> (2 4 6 8 10) @ truename 関数[#!expr] <説明> 形式 : truename pathname ファイル pathname のフル・パス名を返す。 <例> (truename "cs:") -> "Ho::cs:foo.tao" (truename "test.tao") -> "Ho::cs:test.tao" @ truncate 関数[#!subr] <説明> 形式 : truncate number1 &opt number2 number1 を number2 の値で割り算した結果の小数点以下を切り捨てた値を返す。 (number2 が指定されない場合、number1 の値)。 <例> (truncate 2.6) -> !(2 0.600007) (truncate 2.4) -> !(2 0.399993) (truncate 0) -> !(0.0) (truncate -0.3) -> !(0 -0.30) @ two-way-stream クラス <説明> インスタンスが双方向ストリームであるクラス。 入出力両方向に動作し、データは、入力ストリームからとられ、出力 ストリームに送られる。 @ tyi 関数[#!subr] <説明> 形式 : tyi stream stream から 1 バイトを読み、それに対応する ASCII コードを返す。stream が省略されると、*standard-input* の値 (通常コンソールターミナル) が指定 されたものと見なす。stream に読まれる文字がなくなれば、0 を返す。 <例> (!aa (open "asd.tao")) -> {udo}1256651file-stream (tyi aa) -> 113 ("q") (tyi aa) -> 119 ("w") (tyi aa) -> 0 (:eof) @ tyi-no-hang 関数[#!subr] <説明> 形式 : tyi-no-hang stream stream のバッファに文字があれば、1 文字読み、対応する ASCII コードに 変換して返す。stream のバッファに 1 文字もなければ、0 (ゼロ) を返す。 stream が省略されると *standard-input* の値 (通常コンソールターミナル) が指定されたものと見なす。 <例> (tyi-no-hang) -> 0 ファイル asd.tao にストリング qw が書かれている (!aa (open "asd.tao")) -> {udo}1172432file-stream (tyi-no-hang aa) -> 113 ("q") (tyi-no-hang aa) -> 119 ("w") (tyi-no-hang aa) -> 0 @ tyi-with-timeout 関数[#!subr] <説明> 形式 : tyi-with-timeout time-units stream stream から 1 文字を読み、その文字を返す。stream のバッファに 1 文字も なければ、time-units (1 time-unit は 20 ミリ秒) 時間、バッファへの入力 を待ち、time-units 時間を過ぎてもバッファに入力された文字がなければ、 nil を返す。time-units を省略した場合、tyi と同じ。stream が省略される と、*standard-input* の値 (通常コンソールターミナル) が指定されたものと 見なす。 @ tyib 関数[#!subr] <説明> 形式 : tyib &opt stream stream から、1 ユニットの入力ストリームを読み、それを返す。stream が 省略されると、*standard-input* の値 (通常コンソールターミナル) が指定 されたものと見なす。stream でコンソールターミナルを指定した場合は、 1 バイトが 1 ユニットになるので tyi を使うのと同じ。現在は tyi と まったく同じ。 <例> (!aa (open "asd.tao")) -> {udo}1256651file-stream (tyib aa) -> 113 ("q") (tyib aa) -> 119 ("w") (tyib aa) -> 0 (:eof) @ tyo 関数[#!subr] <説明> 形式 : tyo code &opt stream stream に、code を ASCII コードに対応させた文字を出力し、code を返す。 stream が省略されると、*standard-output* が使われる。code は、数でなけ ればならない。 <例> (tyo 113) -> q113 (tyo 119) -> w119 (tyo 101) -> e101 @ tyo-with-timeout 関数[#!subr] <説明> 形式 : tyo-with-timeout ticks code &opt stream ticks (ticks が 1 なら 20 ミリ秒) が過ぎ去っても、まだ code が、stream に出力されていなければ、nil を返し、出力されていれば、code に対応した 文字を返す。stream の既定値は、*standard-output* の値。ターミナルもしく はポートのハングアップをチェックするのに利用できる。 <例> (tyo-with-timeout 10 97) -> a97 (!aa (open "eli.tao" :direction :output)) -> {udo}1275469file-stream (tyo-with-timeout 100 97 aa) -> 97 (tyo-with-timeout 100 98 aa) -> 98 (tyo-with-timeout 100 99 aa) -> 99 (close aa) -> ok ファイル eli.tao に abc が書き込まれた @ tyob 関数[#!subr] <説明> 形式 : tyob code &opt stream stream に、code を ASCII コードに対応させた文字を出力し、code を返す。 code は、数でなければならない。つまり、tyo とほぼ同様の働きをする。 違いは、stream に 1 ユニットだけが出力されること。stream の省略される と、*standard-output* が使われる。stream でコンソールターミナルを指定す れば、tyob は、tyo と同じ。(tyo は 1 バイトとして、1 ユニットとり、 1 ユニットは、コンソールターミナルでは、1 バイト) <例> (!aa (open "eli.tao" :direction :output)) -> {udo}1275469file-stream (tyob 97 aa) -> 97 (tyob 98 aa) -> 98 (tyob 99 aa) -> 99 (close aa) -> ok (tyob 97) -> a97 (tyob 98) -> b98 (tyob 99) -> c99 @ type 関数[#!expr] <説明> 形式 : type file &opt stream file の内容を stream にプリントする。 stream が省略されると *standard-input* の値 (通常コンソールターミナル) が指定されたものと見なす。 @ type-of 関数[#!expr] <説明> 形式 : type-of object object が属するタイプの型指定子を返す。 <例> (type-of 3) -> fixnum (type-of "moji") -> simple-string (type-of 123.4) -> simple-float (type-of '(a b c)) -> cons @ typecase 関数[#!macro] <説明> 形式 : typecase key-form (type1 form11 form12 ...) (type2 form21 form22 ...) ... key-form を評価した値が型指定子 type1 type2 ... のどれかにマッチするか を調べる。見つかれば、その後にくるフォームを順に実行し、最後のフォーム の評価結果を返す。見つからなけば nil を返す。 <例> (typecase an-object (string ... ) ((array t) ... ) ((array bit) ... ) (array ... ) ((or list number) ... ) (t ... )) @ typep 関数[#!expr] <説明> 形式 : typep object &opt type object のデータタイプが型 type と一致しているなら object を、それ以外 なら nil を返す。type の指定がない場合、object のタイプを示すシンボルを 返す。 <例> (typep () 'null) -> t (typep 'abc 'symbol) -> nil (typep "a" 'atom) -> t (typep '(1 2 3) 'list) -> (1 2 3) (typep 123 'number) -> 123 (typep "a" 'character) -> "a" (typep "string" 'string) -> "string" (typep 123 'string) -> nil @