ソフトウェアの成果として、「KLIC の Tcl/Tk インターフェース
klitcl
」、研究上の成果として、「グラフ描画アルゴリズムの改良」
「Undo 機能の研究」が挙げられる。以下にその概要を述べる。
klitcl の実装
klitcl
という、KLIC から Tcl/Tk を利用するためのインタフェース
を制作した。klitcl
を利用することにより、KLIC を用いたプログラムに
GUI を装備することが容易となる。
利用環境としては、以下のバージョンのソフトウェアを使用する ことをを想定している。
KLIC: Version2.002 , Tcl: Version 3.7 , Tk:Version 4.0 OS としては、SunOS 4.1.x を想定し、それに基づいて実装している。
klitcl
は、以下の命令を KLIC に追加する。
これらの命令群は、tcl
というモジュールに含まれるような
実装となっているため、実際に用いる際には以下の例のように、最初に
use_module
を用いてモジュールを読みこんでおく必要がある。
:- use_module(tcl). :- module main. main :- tcl:tcl_init, tcl:tk_init, tcl:tcl_eval("button .b -text Exit -command exit",Res1), tcl:tcl_eval("pack .b",Res2), io:outstream([print(Res1),nl,print(Res2),nl]), tcl:tk_mainloop.
これは、以下の Tcl/Tk スクリプトに(ほぼ)対応する。
button .b -text Exit -command exit pack .b
また、Tcl の側から KLIC の述語を呼ぶための手段として、KLIC
という Tcl 命令を提供する。
呼び出し方は、以下の例のように、「KLIC
<述語名> <引数>」
として呼びだす。
: tcl:tcl_eval("button .b -text Test -command {KLIC test Hello!}",Res1), : test(S) :- io:outstream([print(S),nl]).
これにより、''Test'' と表示されたボタンを押すと、画面には
Hello!
と表示される。
グラフ描画アルゴリズム
現存する各種のグラフ描画アルゴリズムは、グラフの構造が与えられたときに、 それを適切に配置することは可能だが、グラフの初期配置が人間の手に よって与えられ、それをアニメーションさせながら動かすことにより 最適な配置まで持っていくような場合には、あまり適しているとは言えない。
ビジュアルプログラミングシステムを始めとする、インタラクティブな コンピュータシステムにおいて、情報を的確にユーザに提示する手段と して、アニメーションは非常に有効な手段となり得ることを考え、 最終的には、GHC の実行の可視化に用いることを目標として、 既存のグラフ描画アルゴリズムを、アニメーションに適した形に改良する ことにした。
本研究においては、並列論理型言語 GHC のビジュアル化を考えるため、 グラフの描画アルゴリズムとして、「スプリング・モデル」をベースと したものを用いることにした。「スプリング・モデル」は、ノードの 均一な配置ができる点などで有利である。
スプリング・モデルの中で、特に Kamadaのアルゴリズム[2] とEades のアルゴリズム[3]をベースに、グラフのアニメーションの実験を 行ってみたところ、これらのアルゴリズムの計算の1ステップをアニメー ションの 1 コマに対応させて表示させた場合に、ノードの動きが不連続に なってしまい非常に見苦しくなるという現象が見られた。この現象は、 両者のアルゴリズムがアニメーションに適していないことを示しており、 改良の必要があると考えた。
ノードの不自然な動きの原因となっているのは、Kamadaにおいては ノード微小移動量の算出に用いるニュートン法であり、Eadesにおいては 「ノード間斥力は距離の2乗に反比例する」という、Eadesのアルゴリズムに おける力の定義である。
この問題を解決するために、以下の方法をとった[4]。
これにより、改良を加える前に比べて、自然なアニメーションが可能であ るということが確認できた。
グラフをアニメーションするには、このような方法の他にも、 あらかじめ目標配置を計算し、それに応じてコマ割りをしてアニメーション をする方法がある。このような方法は、アニメーションそのものの速度を上げる ことができる反面、アニメーションの最中にもユーザのグラフに対する 操作を許すような場合に、処理が大変になる。また、再配置およびコマ割りに まとまった時間を必要とするため、インタラクティブ性を損う恐れがある。
図1に、実際のグラフに対して KamadaとEadesの各アルゴ リズムを適用した結果と、これらを改良したアルゴリズムを適用した結果を示 す。図中のドットは、ノードの移動した軌跡を示している。
これらを見るとわかるように、改良後の方が、ノードの動きが自然である。特 に、Eades の改良の方では、ノードの動く範囲がある一定の範囲内におさまっ ている。
GHC の実行をグラフを用いてアニメーション化する場合、複数のグラフがさら に互いに接続される状態というのが起り得る。このようなときに、各々のグラ フのノードの移動する範囲がある一定の範囲にあることが保証できれば、その 各々のグラフを「ひとつの大きなノード」とみなすことにより、「グラフ同士 をつないだグラフ」に対してもこの改良したアルゴリズムを適用し、アニメー ションをすることが可能になる。
今後は、この改良したアルゴリズムを利用して、実際にビジュアルなGHC の実 行系を実装する予定である。
Undo 機能についての研究
インタラクティブなシステムにおいて、自分のやった操作を取り消すための 「Undo機能」は非常に重要な位置を占める。 これまでに様々なプログラムに Undo 機能が使われているが、それらには、任意の状態に戻すために多くの ステップを経なくてはならなかったり、それまでに通過した全ての状態を 保存できず、ある状態に戻ることができないなどといった欠点があった。
我々は、Undo のインターフェースとして、従来の 「ヒストリを前後にたどるもの」の他に、新たに木構造に基いた Undo 機能を実現した。
Undo のインターフェースとして、「ヒストリを前後にたどるもの」 「上下左右に木構造の中を動くもの」のそれぞれについて、「移動キー だけのもの」と「状態をミニチュアで画面表示し、それを選択するもの」を 実現した。また、「全部の状態のミニチュア表示から選択するもの」 「全状態のうちの主要なものを選んでミニチュア表示をし、そこから選択するもの」 を試作し、評価した。
評価結果としては、木構造の中をたどらせる Undo よりも、従来からある、 ヒストリをたどるような Undo の方が、目的の状態にするためにかかる 時間が短かった。また、ミニチュアを表示するものよりも、表示しない ものの方が短い時間で目的の状態に到達できた[5]。
今後の課題
klitcl
に関しては、さらなる改良を行い、
機能の拡張を図り、
klitcl
を用いて、ビジュアルでインタラクティブな
GHC 実行系の実装を行っていく。
ビジュアルプログラミング・システムに関しては、 アニメーション技法についての研究を、グラフ描画アルゴリズムをベース として進める。
研究成果についての自己評価
klitcl
の制作、および、ビジュアルプログラミング・システムの
基礎として、グラフ描画アルゴリズムと入力メソッド(特に、Undo機能)
について研究を進めてきた。
klitcl
については、これをフリーソフトウェアとして
発表することにより、多くの KLIC プログラマが GUI を取り入れた
アプリケーションを容易に作成できるようになる。
また、グラフ描画アルゴリズムや入力メソッド
の改良については、今後開発するビジュアルプログラミング・システムの
重要な要素技術となると共に、それぞれ単独でも様々な応用が考えられる。