gauche.interactive
- インタラクティブセッション ¶インタラクティブセッションで便利なユーティリティ手続きを提供します。
gosh
をインタラクティブモードで起動した場合、
このモジュールは自動的にロードされます。
また、このモジュールはgauche.reload
(gauche.reload
- モジュールの再ロード参照)で定義される
手続きに対してautoloadを設定し、それらの手続きが
インタラクティブな開発時にデフォルトで使えるようにします。
{gauche.interactive
}
名前がpatternにマッチするような定義された変数のリストを表示します。
moduleにモジュールオブジェクトまたはモジュール名を与えた場合は、
そのモジュール内で定義されている変数のみが表示されます。moduleが
省略された場合は、カレントモジュールから「見える」変数が全て表示されます。
patternはシンボルか正規表現オブジェクトでなければなりません。 シンボルの場合、そのシンボル名を部分文字列として名前に含むような変数が リストされます。正規表現オブジェクトの場合は、その正規表現にマッチする 名前を持つ変数がリストされます。
いくつか例を示します。
;; "string"を名前に含む変数を表示 (apropos 'string) ;; srfi.14モジュールの中のみを検索 (apropos 'char 'srfi.14)
{gauche.interactive
}
これはdescribe
の別名として定義されています
(詳しくはインスタンスの記述参照)。
短い名前の方がREPLで打ちやすいからですが、
今ではREPLトップレベルコマンド,d
の方が使いやすいでしょう。
このモジュールはまた、ジェネリックファンクションdescribe
にいくつか
組み込みオブジェクト向けのメソッドを追加します。
引数なしで呼ばれた場合、REPLでの直近の評価値が束縛されている*1
の値を
describeします。
シンボル用にカスタマイズされたdescribeです。 ロードされているモジュール中からそのシンボルへの束縛を探して表示します。
gosh$ ,d 'filter filter is an instance of class <symbol> Known bindings for variable filter: In module `gauche.collection': #<generic filter (2)> In module `gauche': #<closure (filter pred lis)>
文字用にカスタマイズされたdescribeです。 Unicodeコードポイントとジェネラルカテゴリを表示します。
gosh$ ,d #\π #\π is an instance of class <char> (U+03c0, Ll)
正確な整数用にカスタマイズされたdescribeです。 値の範囲に応じて、いくつかの情報を示します。 16進数表示、1024単位の概数(メモリやストレージのサイズに便利です)、 Unicodeコードポイントとして見た場合の文字、 そしてUnix timeとして見た場合の時刻です。
gosh$ ,d 1234 1234 is an instance of class <integer> (#x4d2, ~ 1.2Ki, #\Ӓ as char, 1970-01-01T00:20:34Z as unix-time) gosh$ ,d 12345678 12345678 is an instance of class <integer> (#xbc614e, ~ 11Mi, 1970-05-23T21:21:18Z as unix-time) gosh$ ,d 12345678901234567890 12345678901234567890 is an instance of class <integer> (#xab54a98c_eb1f0ad2, ~ 10Ei)
正確な有理数用にカスタマイズされたdescribeです。 非正確数に変換された場合の小数表示も示します。
gosh$ ,d 1234/5678 617/2839 is an instance of class <rational> inexact: 0.2173300457907714
不正確な実数用にカスタマイズされたdescribeです。 浮動小数点数としてのバイナリ表現と、 正確数に変換された場合の有理数表示も示します。
gosh$ ,d 3.14159265358979 3.14159265358979 is an instance of class <real> mantissa: #x+19_21fb_5444_2d11 exponent: -51 hex: #x4009_21fb_5444_2d11 exact: 144029661/45846065
複素数用にカスタマイズされたdescribeです。 極座標形式も表示します。
gosh$ ,d (expt -2 1/4) 0.8408964152537146+0.8408964152537146i is an instance of class <complex> polar: 1.1892071150027212@0.7853981633974483 (@0.25pi)
手続きとマクロ用にカスタマイズされたdescribeで、
ソースコード位置を(分かれば)表示します。
また、手続きについてはその型も表示します
(procedure-type
、procedureクラスと適用可能性参照)。
gosh> ,d display-filled-text #<closure (display-filled-text text :key (port (current-output-port)) (indent 0) (hanging 0) (width 65) (lead-in #f) (start-column #f))> is an instance of class <procedure> Defined at "/usr/share/gauche-0.98/0.9.15-p1/lib/text/fill.scm":111 type: #<^ <top> * -> *> slots: required : 1 optional : #t optcount : 1 locked : #f currying : #f constant : #f info : (display-filled-text text :key (port (current-output-port)) setter : #f
ジェネリックファンクション用にカスタマイズされたdescribeです。 メソッドのリストも表示します。 メソッドは、スペシャライザーのリストと、わかれば定義のソース情報が示されます。
gosh$ ,d describe #<generic describe (11)> is an instance of class <generic> slots: name : describe sealed : #f info : describe methods : (#<method (describe <macro>)> #<method (describe <procedure> methods: (<macro>) ; "/usr/share/gauche-0.98/0.9.15-p1/lib/gauche/interactive.scm":223 (<procedure>) ; "/usr/share/gauche-0.98/0.9.15-p1/lib/gauche/interactive.scm":215 (<method>) ; "/usr/share/gauche-0.98/0.9.15-p1/lib/gauche/interactive.scm":208 (<generic>) ; "/usr/share/gauche-0.98/0.9.15-p1/lib/gauche/interactive.scm":189 (<real>) ; "/usr/share/gauche-0.98/0.9.15-p1/lib/gauche/interactive.scm":172 (<rational>) ; "/usr/share/gauche-0.98/0.9.15-p1/lib/gauche/interactive.scm":160 (<integer>) ; "/usr/share/gauche-0.98/0.9.15-p1/lib/gauche/interactive.scm":128 (<char>) ; "/usr/share/gauche-0.98/0.9.15-p1/lib/gauche/interactive.scm":123 (<symbol>) ; "/usr/share/gauche-0.98/0.9.15-p1/lib/gauche/interactive.scm":118 () ; "/usr/share/gauche-0.98/0.9.15-p1/lib/gauche/interactive.scm":116 (<top>)
メソッド用にカスタマイズされたdescribeです。 ソースコード位置が分かればそれも表示します。
gosh$ ,d (car (~ describe'methods)) #<method (describe <macro>)> is an instance of class <method> Defined at "/usr/share/gauche-0.98/0.9.15-p1/lib/gauche/interactive.scm":223 slots: required : 1 optional : #f method-locked: #f leaf? : #t generic : #<generic describe (11)> specializers: (#<class <macro>>) info : (describe <macro>)
{gauche.interactive
}
Gaucheのinfoドキュメント中から、
symbolで指定される手続き、構文要素、モジュールもしくはクラスの
エントリを表示します。
もし環境変数INFOPATH
が定義されていればそこに
示されるディレクトリ中から探され、そうでなければgosh
のライブラリディレクトリ
から推測されるディレクトリ中から探されます。
infoドキュメントが見付からなかった場合はエラーとなります。
つまり、この手続きはinfoファイルがインストールされていないと動作しません。
もしsymbolに完全に一致するエントリが見つからなかった場合、 類似するエントリがあればそれらがリストされます:
gosh> (info 'stirng) There is no entry for stirng. Did you mean: string> string? string= string< string :string
(パターンにマッチするエントリを探したい場合は下のinfo-search
を見てください)
現在の出力ポートが端末である場合、infoドキュメントの該当ページは
ページングプログラムを用いて表示されます。環境変数PAGER
が指定されていれば
それを用い、そうでなければコマンドサーチパスからless
及びmore
を
この順で探します。いずれも見付からなかった場合や、出力ポートが端末では
ない場合には、単にページがそのまま出力されます。
この手続きのセッション中での最初の呼び出しは、infoファイルをパーズするために 多少時間がかかります。
註: less
をページャに使う場合、less
がutf-8文字を扱えるように
設定してください (例えばLESSCHARSET
環境変数をUTF-8
にする)。
そうでないと画面にエスケープされた文字が表示されて見づらいです。
註: gosh
を-ftest
オプションをつけてビルドツリー内で起動した場合、
info
はビルドツリー内のinfoファイルを(もしあれば)読みます。
{gauche.interactive
}
regexpにマッチするinfoのエントリをリストします。
infoファイルがどこから読まれるかについては上のinfo
の説明を参照してください。
{gauche.interactive
}
外部エディタを起動し、与えられた名前のファイル、もしくは与えられた手続きの定義がある
ファイルを開きます。後者については、与えられた手続きを
source-location
に渡して定義箇所を調べます(デバッグ補助参照)。
定義箇所がわからなければファイルは開かれません。
起動するエディタの名前は次の順序で決定されます。
user
モジュール中の変数*editor*
の値。
これは、.gaucherc
内で設定しておくのが便利です。
GAUCHE_EDITOR
の値
EDITOR
の値
上記のどの値も定義されていないか#f
なら、
手続きed
はユーザにエディタ名を入力するように促します。
エディタの名前がわかったら、それが子プロセスとして次の形式で実行されます。
EDITOR +lineno filename
linenoは整数の行番号で、1が先頭行です。エディタは指定された行の頭に カーソルを移動することが期待されます。
エディタプロセスが終了したら、ed
はファイルが更新されたかどうかを調べ、
更新された場合はload-after引数の値によってそのファイルをロードするかどうかを
決定します。load-after引数の値は以下のいずれかです。
#t
ファイルが更新されていれば自動的にロード
#f
ファイルをロードしない
ask
シンボルask
の場合は、ロードすべきかどうかユーザに尋ねる。
これがデフォルトの動作です。