次のように入力し、トレースモードにするとPrologの実行過程を 1ステップ単位で調べることができます。 実際にProlog内部で行われている処理を見ることができるのでプログラムの 動作を確認するのにとても役に立ちます。
実際に述語memberを用いて試してみましょう。 基本的なトレースの流れは次のようになります。
csh% cat mem.pl member(X,[X|Tail]). member(X,[Head|Tail]) :- member(X,Tail). csh% prolog | ?- [mem]. | ?- trace. % トレースモードに移行 |[trace] ?- member(b, [a,b]). % ゴールとなる述語を入力 Call: (7) member(b, [a, b]) ? % プログラムの内部的な実行過程が表示される Call: (8) member(b, [b]) ? % この`?'の後にコマンドを入力することができる Exit: (8) member(b, [b]) ? Exit: (7) member(b, [a, b]) ? yes |[debug] ?- nodebug. % トレースモードから通常のモードに戻る何やら次のような情報が表示されました。では、それぞれ何を意味しているのか見てみましょう。
Call: (7) member(b, [a, b]) ?
トレースモードの基本的なコマンドとして次のものがあります。
|[trace] ?- member(b, [a,b]). Call: (7) member(b, [a, b]) ? creep Call: (8) member(b, [b]) ? creep Exit: (8) member(b, [b]) ? creep Exit: (7) member(b, [a, b]) ? creep Yes
|[trace] ?- member(X, [a,b]). Call: (7) member(_G318, [a, b]) ? skip Exit: (7) member(a, [a, b]) ? skip X = a ; Exit: (7) member(b, [a, b]) ? skip X = b ; No
その他、今後追加予定。
実行結果が長い場合など、端末からのコピー&ペーストが大変なときは、 次のような方法を参考にしてみて下さい。
Emacsのシェルモードを使うとEmacs上でシェルを立ち上げてprologを 実行することができます。(Emacsのバッファ上に結果が出力されるので ログが流れる心配がありません)
[方法]
詳しくは以下のサイトを参考にしたり、自分で調べる等して下さい。
prompt% script スクリプトを開始しました、ファイルは typescript です prompt% prolog Welcome to SWI-Prolog (Multi-threaded, Version 5.6.8) Copyright (c) 1990-2006 University of Amsterdam. SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,l----------- and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details. For help, use ?- help(Topic). or ?- apropos(Word). | ?- ** 処理を実行 ** | ?- halt. prompt% exit exit スクリプトを終了しました、ファイルは typescript です
ここで、typescriptというファイルに上記の内容が保存されたので、 次のようにして見ることができます。
prompt% cat typescript
演習では、SWI-Prolog Version 5.6.12 を用います.
Prolog関連のファイルは,
/usr/local/lib/pl-5.6.12にあります.またProlog本体等の実行ファイルは,
/usr/local/bin/にあります.
muleでは標準の設定で prologモードを利用することができると思います.(M-x run-prolog)
特に設定は必要ありませんが,万一利用できない場合は尋ねて下さい.
Prologの起動については,指導書1~8ページを参照して下さい.
本演習のレポート回収のシステムは,ex世木研究室の 中村智典くんが作ってくれました.