このページではJavaScriptを使用しています。

1.はじめに

1-1. AZ-Prolog概要

AZ-Prologは、「ISO/DEC-10 Prolog」に準拠した、世界最速級の処理性能を誇る論理型言語Prolog処理系です。
Prologによる手軽なプログラム開発やデバッグの環境を提供する「インタプリタ」、インタプリタ上での実行を高速化する「バイトコード・コンパイラ」、さらに高速な単独実行プログラムの作成を実現する「C言語ソースコード・コンパイラ」、プログラムをWEBサイトとして公開可能にする「CGIインタプリタ」などを備えています。

豊富に提供される拡張機能(9章を参照)により、開発できるアプリケーションの幅や可能性はさらに広がりました。


また、64ビットOS対応により、OSの提供する広大なメモリ空間を利用することができるようになり、従来は解が求まらなかった巨大なプログラムも走らせることが可能となりました。
さらに、CPUのマルチコア化に伴い、その性能をフルに活用するため、プログラムを複数のプロセスに分散して並列で駆動するMPI(Message Passing Interface)ライクな仕組みを取り入れました。これにより、Prologプログラムをより高速に実行することが可能となっています。


AZ-Prolog用Eclipseプラグインを利用することにより、Prologプログラムの開発(ソース作成、ソース管理、デバッグなど)を効率よく、ビジュアルに行うことができます。また、デバッグ機能をPrologの学習に援用すれば、Prologプログラミングの特徴である、再帰・ユニフィケーション・バックトラックなどの振る舞いを容易に理解、習得することができます。

 

Version9以降において、Prologのデータ型(項)に素性構造型を追加しました。これにより、HPSGなどの単一化文法を容易に記述できるようになりました。

Version9.5以降において、型付素性構造型をサポートしました。

動作環境

OS Win32/64(Windows 10/8/7)、Linux 32/64 (Ubuntu 16.04/14.04/12.04)、 Mac OS(v10.12 Sierra)、Mac OS X(v10.9 Mavericks, v10.10 Yosemite, v10.11 El Capitan)
対応Cコンパイラ Microsoft Visual Studio 2017/2015/2013、GCC
ハードウェア 上記OSが動作する環境。64ビット版では6Gバイト以上のメモリを推奨
ディスク容量 60MB以上

※Win32版は64ビットOS上でも動作しますが、Win64版は32ビットOSでは動作しません。 一部の拡張機能については外部ライブラリを利用している関係から、2015年現在、32ビット版のみ対応のものがあります(現状はCaboChaのみ)。
Mac版は、v10.9以上でないと動作保障の対象外となります。

32ビット版と64ビット版の主な相違点

  32ビット版 64ビット版
セルサイズ 8byte 16byte
整数の範囲 -2147483648~2147483647(※1)
e_register/3,repeat/1のとる値も同じ 
-9223372036854775808~9223372036854775807(※1)
e_register/3repeat/1のとる値も同じ
数値演算 - 整数と浮動小数点数(倍精度)の混在する計算結果は浮動小数点数になりますが、浮動小数点数の仮数部(52ビット)よりも整数の範囲が大きいため、大きな整数の演算では、計算結果が情報落ちすることがあります。
数値アレイ 1,2,4byte 1,2,4,8byte
ヒープ・スタックサイズ 合計最大2Gバイト OSと実メモリの提供範囲
※1 整数の範囲を超えた数値を入力またはプログラム上に記述したとき
s_int_ovf_mode/2 で設定されたモード(デフォルトはon)により、
on の場合は 読み込み時にエラーとなり、offの場合はエラーにはなりませんが異なる数値になります。

1-2. このマニュアルについて

1-2-1.マニュアルを読むために必要な知識

・Prolog言語の知識
AZ-Prologのシンタックスは「ISO/DEC-10 Prolog」に準拠していますので、その知識を前提とします。

このマニュアルの「4.Prolog言語」でもProlog言語について解説をしていますが、Prolog言語を全くご存じ無い方には少々説明が不足かも知れません。そこで、Prolog言語についての入門書を読みながらこのインタプリタを使っていかれることをお奨めします。
Prolog言語の入門書・解説書については次項の「1-2-2.Prolog言語に関する参考文献」で紹介します。


・OSの知識

各OSの基本的な使い方を始め、エディタの概念などは最低限知っている必要があります。また、AZ-Prologには、コマンドライン・ユーティリティーを実行出来る「system」述語と、一時的にOSのコマンド・プロンプトレベルに抜けられる「sh」述語などがあります。これらを使用する場合は、用途に応じた知識が必要です。


・Webサーバー、CGIの知識

AZ-PrologではPrologアプリケーションをCGIとしてWeb公開できる機能が実装されています。これらを利用するためには、Webサーバーの設定、CGIの知識が必要です。

1-2-2.Prolog言語に関する参考文献
  • (1)Prolog-KABA入門    柴山悦也・桜川貴司・荻野達也  著 岩波書店
  • (2)Prolog入門    古川康一 著 オーム社
  • (3)Prolog    中島秀之 著 産業国書
  • (4)Prolog入門    後藤滋樹 著 サイエンス杜
  • (5)知識指向言語Prolog    小谷善行 著 技術評論社
  • (6)Prologプログラミング入門    安部意広 著 共立出版
  • (7)Prologとその応用    溝口文雄  監修 総研出版
  • (8)はじめてのProlog    舟本奨 著 ナツメ社
  • (9)Prologの技芸    Leon Sterling、Ehud Shapiro 著 共立出版
  • (10)Prologで学ぶAI手法―推論システムと自然言語処理    高野真 著 啓学出版
  • (11)Prologで学ぶAIプログラミング    赤間 世紀 著 工学社
1-2-3.どの部分から読み始めるか

AZ-Prologを購入またはダウンロードされて、最初にサンプルプログラムを動かされると思います。

そのためにはまず「2.インストールと環境設定」に記述されているインストール方法の指示に従って、AZ-Prologの動作可能な環境を作ります。
インストールが終了し「3-2.やってみましょう」を参照されれば、サンプルプログラムを動かすことが出来ます。
その次にはご自分で簡単なプログラムを打ち込んで実行してみることでしょう。
プログラムを入力するには次の方法があります。

[1]外部のエディタを使って作成したプログラムをPrologに読み込む。

[2]コンソールから直接プログラムを入力する。

[3]標準のインタプリタに組込述語として内蔵されている、Prologプログラム向けのスクリーンエディタAzEditを使ってプログラムを入力し、そのエディタ・バッファの内容をインタプリタにプログラムとして直接転送する。

方法[1]と方法[2]は、「5-3.プログラムの入カ方法」で、方法[3]は「9-10.AzEditの使い方」でそれぞれ説明しています。

AZ-Prologの初版を開発した当時と比べ、現在では高機能なエディタが多くあります。 AzEditより使い慣れたエディタがあれば、そちらを使ってプログラムを入力する方が効率が上がると思われます。 従来からご使用頂いているユーザ様及びプログラムの互換性を考慮し、AzEditを付属しております。 用途に応じて、外部のエディタとAzEditを使い分けるとよりプログラムの開発効率が上がるようになります。
AZ-Prologに慣れてきたところで、デバッガを使ったり、組込述語の機能を調べ始めてください。 Prolog言語についてある程度知っておられる方や「Prolog」を使った経験がある方は、本システム独自の機能について必要に応じて参照してください。

1-3. 表記規則

1-3-1.ユーザが入力する部分

以下の例では、ユーザが入力する部分を表しています。
また、「↓」はCR(キャリッジリターン/Enter)キーを押すことを表します。
<例>

C:¥>Prolog↓


ここで「C:¥>」は、OSの対話型シェル(CMD.EXE等)レベルでコンソール(画面)に出力されるプロンプトであり、「Prolog↓」がユーザによって入力された(されるべき)文字列です。
また、ユーザが入力する部分に下線「_」が含まれる場合がありますので見落とさぬ様にご注意ください。

1-3-2.述語の表記
Prologでは述語名とアリティ(引数の個数)で特定の述語が決まります(述語名が同じでもアリティが異なれば違う述語として扱われます)。
そこで、特定の述語を表すのに[述語名/アリティ]という記法を用いています。

<例>
true/0 ・・・ 名前が「true」で引数が無い述語
リカイスル/2 ・・・ 名前が「リカイスル」で引数が2個の述語

また、演算子及び算術関数は、上記の様に引数とともに表記する場合と、以下の例のように[演算子または算術関数名/オペレータの型]という記法で表記する場合があります。


<例>
+ /yfx ・・・ 引数が2個の中置演算子(X+Yのように用いる)
- /fy ・・・ 引数が1個の前置演算子(-Yのように用いる)
1-3-3.コントロール・キャラクターと機能キー

例えば、キャラクター・コード(ASCIIコード)1のキャラクタを、「CTRL-A」のように表します。
また、コントロールキャラクタをキーボードから入力する場合は、「^」 を付けて表します。例えば、「CTRL-X」をキーボードから入力する場合は 「^X」と表します。
ただし

① 入力行を終了させるキー(キャリッジリターン)
② 入力を終了させるキー
③ 中断キー

以上の3つの機能キーはオペレーティング・システムによって異ったり、オペレーティング・システムの中には個人の好みにより、端末毎にキー割当てが変更できるものもあります。
従って本書では混乱を避ける為、それぞれ以下の様に表記しています。

① 入力行を終了させるキー・・・END_OF_LINEキー
② 人力を終了させるキー・・・・END_OF_INPUTキー
③ 中断キー・・・・・・・・・・INTERRUPTキー

1-3-4.コメント

本文のプログラム中の「/* ・・・・ */」という文字列、またはある行の「%」以下はコメント文を表しています。
またコメント文ではありませんが、本マニュアルの中で説明文をプログラム中の「←」以下に書いてある所もあります。
注)実際のソースプログラムに「←」を書く事は文法上許されていません。

1-3-5.「¥」と「\」

JISキーボード以外のキーボードを採用している機種では、キャラクタコード[92]の「¥」はキートップ及び画面表示が「\」となります。
本マニュアルでは国内のパソコン及びワークステーションの多くがJISキーボードを採用していることから「¥」で統一するものとします。.