For Gauche 0.9.5


Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]

12.50 text.diff - テキストストリームの相違点を計算する

Module: text.diff

このモジュールでは、util.lcs (最長共通サブシーケンス参照)を 使って、2つのテキストストリーム、あるいは2つの文字列の相違点を計算します。

Function: diff src-a src-b :key reader eq-fn

テキストソースsrc-asrc-bから“編集リスト”を生成します。

それぞれのテキストソース、src-asrc-bは入力ポートか文字列です。 もし文字列であれば、それは内部的に文字列ポートに変換されます。 そして、2つのソースからのテキストストリームは、それらに対してreaderを繰り返し 呼ぶことによってシーケンスに変換されます。デフォルトのreaderread-lineで、 2つのシーケンスは編集リストを計算するためにlcs-edit-listに渡されます。 lcs-edit-listには、等値を検査する関数eq-fnも渡されます。

編集リストとは、src-aからsrc-bへテキストシーケンスを 変更するためのコマンドのセットです。編集リストの詳細な説明は、 lcs-edit-listを参照してください。

(diff "a\nb\nc\nd\n" "b\ne\nd\nf\n")
⇒
  (((- 0 "a"))
   ((- 2 "c") (+ 1 "e"))
   ((+ 3 "f")))
Function: diff-report src-a src-b :key reader eq-fn writer

2つのテキストソースのdiffをとって、その結果をきれいに表示するための 簡易手続きです。この手続きは、2つのテキストソースの相違点を計算する ためにlcs-foldを呼び出します。src-asrc-breadereq-fnの意味は、diffの場合と同じです。

writerは2つの引数、テキスト要素とタイプ(シンボル+、 シンボル-、あるいは#fのいずれか)を取る手続きです。 テキスト要素がsrc-aにしかない場合は、writerがそのテキスト要素と -とともに呼ばれます。テキスト要素がsrc-bにしかない場合は、 writerはそのテキスト要素と+とともに呼ばれます。 テキスト要素が両方のソースにある場合は、writerはそのテキスト要素と #fとともに呼ばれます。writerのデフォルトの手続きは、 渡されたテキスト要素を現在の出力ポートにユニファイドdiffのようなフォーマットで 出力します。

(diff-report "a\nb\nc\nd\n" "b\ne\nd\nf\n")

displays:

- a
  b
- c
+ e
  d
+ f

Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]