For Development HEAD DRAFTSearch (procedure/syntax/module):

9.14 gauche.interactive - インタラクティブセッション

Module: gauche.interactive

インタラクティブセッションで便利なユーティリティ手続きを提供します。

goshをインタラクティブモードで起動した場合、 このモジュールは自動的にロードされます。

また、このモジュールはgauche.reload (gauche.reload - モジュールの再ロード参照)で定義される 手続きに対してautoloadを設定し、それらの手続きが インタラクティブな開発時にデフォルトで使えるようにします。

Macro: apropos pattern :optional module

{gauche.interactive} 名前がpatternにマッチするような定義された変数のリストを表示します。 moduleにモジュールオブジェクトまたはモジュール名を与えた場合は、 そのモジュール内で定義されている変数のみが表示されます。moduleが 省略された場合は、カレントモジュールから「見える」変数が全て表示されます。

patternはシンボルか正規表現オブジェクトでなければなりません。 シンボルの場合、そのシンボル名を部分文字列として名前に含むような変数が リストされます。正規表現オブジェクトの場合は、その正規表現にマッチする 名前を持つ変数がリストされます。

いくつか例を示します。

;; "string"を名前に含む変数を表示
(apropos 'string)

;; srfi.14モジュールの中のみを検索
(apropos 'char 'srfi.14)
Function: d :optional obj

{gauche.interactive} これはdescribeの別名として定義されています (詳しくはインスタンスの記述参照)。 短い名前の方がREPLで打ちやすいからですが、 今ではREPLトップレベルコマンド,dの方が使いやすいでしょう。

このモジュールはまた、ジェネリックファンクションdescribeにいくつか 組み込みオブジェクト向けのメソッドを追加します。

Method: describe

引数なしで呼ばれた場合、REPLでの直近の評価値が束縛されている*1の値を describeします。

Method: describe (s <symbol>)

シンボル用にカスタマイズされた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)>
Method: describe (c <char>)

文字用にカスタマイズされたdescribeです。 Unicodeコードポイントとジェネラルカテゴリを表示します。

gosh$ ,d #\π
#\π is an instance of class <char>
  (U+03c0, Ll)
Method: describe (n <integer>)

正確な整数用にカスタマイズされた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)
Method: describe (r <rational>)

正確な有理数用にカスタマイズされたdescribeです。 非正確数に変換された場合の小数表示も示します。

gosh$ ,d 1234/5678
617/2839 is an instance of class <rational>
  inexact: 0.2173300457907714
Method: describe (d <real>)

不正確な実数用にカスタマイズされた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
Method: describe (c <complex>)

複素数用にカスタマイズされたdescribeです。 極座標形式も表示します。

gosh$ ,d (expt -2 1/4)
0.8408964152537146+0.8408964152537146i is an instance of class <complex>
  polar: 1.1892071150027212@0.7853981633974483  (@0.25pi)
Method: describe (p <procedure>)
Method: describe (p <macro>)

手続きとマクロ用にカスタマイズされたdescribeで、 ソースコード位置を(分かれば)表示します。 また、手続きについてはその型も表示します (procedure-typeprocedureクラスと適用可能性参照)。

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
Method: describe (g <generic>)

ジェネリックファンクション用にカスタマイズされた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>)
Method: describe (m <method>)

メソッド用にカスタマイズされた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>)
Function: info symbol

{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ファイルを(もしあれば)読みます。

Function: info-search regexp

{gauche.interactive} regexpにマッチするinfoのエントリをリストします。 infoファイルがどこから読まれるかについては上のinfoの説明を参照してください。

Function: ed filename-or-procedure :key editor load-after

{gauche.interactive} 外部エディタを起動し、与えられた名前のファイル、もしくは与えられた手続きの定義がある ファイルを開きます。後者については、与えられた手続きを source-locationに渡して定義箇所を調べます(デバッグ補助参照)。 定義箇所がわからなければファイルは開かれません。

起動するエディタの名前は次の順序で決定されます。

  1. キーワード引数editor
  2. userモジュール中の変数*editor*の値。 これは、.gaucherc内で設定しておくのが便利です。
  3. 環境変数GAUCHE_EDITORの値
  4. 環境変数EDITORの値

上記のどの値も定義されていないか#fなら、 手続きedはユーザにエディタ名を入力するように促します。

エディタの名前がわかったら、それが子プロセスとして次の形式で実行されます。

EDITOR +lineno filename

linenoは整数の行番号で、1が先頭行です。エディタは指定された行の頭に カーソルを移動することが期待されます。

エディタプロセスが終了したら、edはファイルが更新されたかどうかを調べ、 更新された場合はload-after引数の値によってそのファイルをロードするかどうかを 決定します。load-after引数の値は以下のいずれかです。

#t

ファイルが更新されていれば自動的にロード

#f

ファイルをロードしない

ask

シンボルaskの場合は、ロードすべきかどうかユーザに尋ねる。 これがデフォルトの動作です。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT