AZ-Prologが動作する環境が整ったところで、この章では手始めにサンプルプログラム(Nクィーン:N×Nのチェス盤上でクィーンをお互に干渉しないように並べていくパズルゲーム)をインタプリタで動かしてみます。
以下ではそれに必要な最低限の知識が書かれています。
本章の説明は、Windowsのコマンドプロンプトから起動する事を前提として書かれています。Linux版またはMac版をお使いの方は、適宜必要な読み換えを行ってください。
読み換えの詳細は「マニュアルの使い方【1】ユーザーズマニュアルについて」をご覧ください。
先ず、OSのコマンドレベルから
c:¥> prolog↓
と入力します(Windows版でスタートメニューからAZ-Prologを起動する場合は、この入力はいりません)。
すると、別ウィンドウが開き(Linux版では同じターミナル内で)、
AZ-Prolog Interpreter/Compiler Version 9.xx (Win64/x64)
Copyright (C) SOFNEC CO., LTD. 1987-2016/xx/xx
というAZ-Prolog(インタプリタ)の起動メッセージに続いて
| ?-
というPrologのプロンプトが表れます。
これでAZ-Prologが起動して質問(Prologにおける実行命令)を受け付けられる状態(プログラムが実行可能な状態)になります。
AZ-Prologを終了してOSのコマンドレベルに戻るには「consult/1、halt/0 、halt/1」という述語を実行します。
| ?-halt.
この後、OSのプロンプトが出て、OSのコマンドレベルに戻ります。
また「halt/1」を実行するとその引数に設定した数値を結果コードに設定して終了します。
この値は例えばバッチファイル中でIFコマンドのERRORLEVEL条件で終了条件を判定することが出来ます。
AZ-Prologが起動した所で早速サンプルプログラムを実行してみましょう。
インタプリタでPrologプログラムを実行するには、ソースプログラムをヒープ領域(プログラム領域)に読み込む必要があります(この読み込む作業をコンサルト「consult」といいます。コンサルトについては、後の章の「5-3-2.ファイルからのプログラム入カ」を参照してください)。
ここでは「queen.pl」というファイルを読み込みます。
このファイルは、Windows版/Linux版/Mac版ではそれぞれ、
Windows版: | %AZProlog%¥sample¥other |
Linux版: | ${AZProlog}/share/azprolog/sample/other |
Mac版: | ${AZProlog}/share/azprolog/sample/other |
にあります。
カレントディレクトリにある場合は以下コマンドでファイルを読み込みます。
| ?-['queen.pl'].
yes
カレントディレクトリにない場合は、以下の手順でファイルを読み込みます。
OSのコマンドレベルでAZ-Prologのホームディレクトリを確認します。
C:¥>echo %AZProlog%
C:¥Program Files¥AZ-Prolog.9xx
Prologを起動し、組込述語(chdir/1)でカレントディレクトリーを 「queen.pl」があるディレクトリーに変更しファイルを読み込みます。
| ?-chdir('C:¥Program Files¥AZ-Prolog.9xx¥sample¥other').
yes
| ?-['queen.pl'].
yes
Nクィーンのプログラムで8×8の場合(8クィーン)の解を求めてみましょう。
それには
?-q(8).↓
と入力すると以下の様に8クイーンの解を次々と出力するはずです。
| ?-q(8). No.1 . . . . . Q . . . . . . . . Q . . . . . . Q . . . . Q . . . . . Q . . . . . . . . . . Q . . . . . . . . . . . Q . . . No.92 . . . Q . . . . . Q . . . . . . . . . . . . Q . . . Q . . . . . . . . . . Q . . . . . . . . . Q . . . . Q . . . Q . . . . . . . Total = 92 yes | ?-
AZ-PrologをOSのコマンドレベルから起動する時、コマンドにオプションを付加する事により、ワークエリアの専有量や起動時読み込みファイルの指定ができる他、AZ-Prolog上のアプリケーションプログラムにも、任意のパラメータを渡す事が出来ます。
AZ-Prologではインタプリタ及びコンパイルしてできた単独実行プログラムの起動時のオプションとして次のものが指定できます。
アプリケーションプログラムによって当然ながらヒープ領域の専有量、及びその他の各スタック領域の使用量が異なります。
そこで起動時に動作させるアプリケーションプログラムに合せてそれぞれのサイズを指定することができます。
必要サイズの目安については、アプリケーションによる各スタックの最大使用量が分かる述語statistics/0の出力が参考になります。
マシンスタックについては、コンパイル時のみ指定できます。
-h Heap[セル数(キロ単位)]
ヒープ領域(プログラム等の定義が入る領域)の大きさをセル数(キロ単位)で指定します。
-l LocalStack[セル数(キロ単位)]
ローカルスタック(ローカル変数などが入る領域)の大きさをセル数(キロ単位)で指定します。
-g GlobalStack[セル数(キロ単位)]
グローバルスタック(グローバル変数などが入る領域)の大きさをセル数(キロ単位)で指定します。
-a Atoms[セル数(キロ単位)]
アトム領域(アトムと変数名の入る領域)の大きさをセル数(キロ単位)で指定します。
(32ビットOSの場合、1セルは8バイト、1ワードは4バイト、64ビットOSの場合、1セルは16バイト、1ワードは8バイト)
以下のオプションでは起動時にシステムに読み込むファイルなどが指定できます。
-r Restore[ファイル名]
AZ-Prologが起動時にrestoreを行なうファイルを指定します。
-s See[ファイル名]
AZ-Prologの起動時のカレント入力ストリームを指定します。
インタプリタのトップレベルで組込述語see/2を単独で呼び出した場合と同じく、ファイルで定義された節を順次読み込んでアサートします。読込みが終わるとカレント入力ストリームはコンソールに戻ります。
-c Consult[ファイル名]
AZ-Prolog起動時にコンサルトされるファイルを指定します。
-sとの違いはDCG記法で書かれたソースをProlog節へ変換することです。DCG記法については「5-3-2.ファイルからのプログラム入カ」の最後にある
<補足1>
を参照ください。
-b Bytefile[ファイル名]
AZ-Prolog起動時にロードされるバイトコードファイルを指定します。
-sjis
文字コードがShift-JISで入出力を行うことを指定します。
-euc
文字コードがEUCで入出力を行うことを指定します。
-utf8
文字コードがUTF8で入出力を行うことを指定します。
※文字コードを指定しない時はOS(Locale)情報をもとに自動セットされます。
起動後のアプリケーションパラメータ(アプリケーションにOSのコマンドラインから各種の設定値などのを渡す為の値)を渡すためのオプションが指定できます。
-p Param1 Param2 …
「-p」以降の並びをアプリケーションパラメータとして渡す。複数指定する場合は、空白で区切ります。(この値は「get_parameter/1」でアトムのリストとして取得できます)
-nologo
インタプリタ起動時のスタートアップメッセージ表示を抑制します。ユーザーアプリケーションでこのメッセージが出るのが不都合な場合にも指定します。
<例1>
C:¥>prolog -h 10 -a 20 -p 10 20 30
ヒープを10キロセル、アトム領域を20キロセルに設定。
アプリケーションパラメータとして10 20 30を設定します。
「get_parameter/1」を実行するとその引数に[10,20,30]なるリストがユニファイされアプリケーションパラメータが取得できます。
ただし、この[10,20,30]の各要素は数値項ではなくアトム項です。「term_atom/2」を用いてそれぞれを数値項に変換する事も出来ます。
<例2>
C:¥>prolog -r prolog.bin -c prolog.ini
起動値後に「prolog.bin」をリストアして「prolog.ini」をコンサルトします。「prolog.ini」はPrologのソースファイルです。初期設定を行うファイル名に慣習として用いています。
インタプリタ、アプリケーションの起動ディレクトリに「prolog.def」ファイルがあると、これを読み込みワークエリア設定をおこないます。
ファイルは4つの数値をスペースで区切ったもので、順にアトムエリア、ヒープエリア、グローバルスタック、ローカルスタックのサイズをセル数(キロ単位)で記述します。
また、環境変数AZPrologの設定ディレクトリにこのファイルがあると全てに適用されます。適用順は以下のとおりです。
起動時オプション直接指定>起動ディレクトリ「prolog.def」ファイル>AZProlog設定ディレクトリ下(注)の「prolog.def」ファイル>デフォルトサイズ
デフォルトサイズはコンパイル時に指定されたサイズです。
この設定ファイルは、特にエリア指定オプションのできない(「/no」でコンパイルされた)アプリケーションとCGIで有用です。
注:Linux版の場合は、正確には${AZProlog}/share/azprologの直下です。但し、環境変数AZPrologはLinux版のデフォルトインストールではセットされていない可能性があります。その場合は/usr/localと読み換えてください。
Mac版の場合は、正確には${AZProlog}/share/azprologの直下です。なお、環境変数AZPrologは必ず設定されている必要があります。