Prologは、現在ソフトウェアエンジニアリングのさまざまな領域において研究が進められています。またスペシフィケーション、デザイン、ツール、サブシステムの実現、テストや証明手続き用の言語として既に使用されています。
Prologの応用範囲が広いのは、非常にコンパクトな構文、小さく固定されたカーネル、そして論理学的カリキュラムに基づいた厳密なセマンティクスのためです。これらの特性によって、幅広い解釈が可能となり、したがって幅広く使用することができます。
Prologは1972年ごろに論理プログラム用言語として、コルメラウアとコワルスキーによって考案されました。その中心となる考え方は、ホーン節(すなわち、どのような論理的問題を記述するのにも本質的に十分な一階述語論理のサブセット)を手続き的に解釈することです。
Prolog解釈の基本的メカニズム−すなわち一般化されたパターンマッチング・アルゴリズムとしてのユニフィケーションと再帰的手続きコールに類似したゴール置換としての解釈法−と人工知能におけるトップ・ダウン式の問題解決の方法がよく似ているため、PrologはすぐにAI研究とエキスパートシステムの実現のための主要言語のひとつに選ばれました。
一階の述語論理に基づいているため、Prologのプログラムのセマンティクスは2つの方法で定義されます。つまり宣言的セマンティクスは論理の規則と解釈(真か偽かがあたえられている節と整合するモデルという論理的な意味での解釈)です。このようにPrologを理解するならば、アルゴリズムや手続き的なアプローチを用いずにオブジェクトやオブジェクト間の関係を記述する仕様言語としてPrologを使用することが思い浮かぶでしょう。
一方、通常の言語と同様に手続き的セマンティクスも、抽象的インタプリタ(ソフトウェアエンジニアリングでいうところの)をもとに作成することができます。この抽象的インタプリタは、イフ コンピュータが行ったように言語プロセッサにより処理できます。 こうしてみると、Prologとは驚くほどコンパクトな構文を持った非常に高レベルなプログラミング言語であると考えることができるでしょう。PrologはしばしばLISPと比較されますが、このように比較することは、一定の基本的言語構造とメカニズム、それに非手続き的セマンティクスを考慮した時のみ可能でしょう。しかし両言語の計算モデルや、プログラミングの概念は全く異なっています。このことは両言語とその処理系を比較する際に留意しておくべきことです。
現在出回っている大部分の文献では、Prologを"LISPの方言"として扱っていますが、これはLISPのリストがPrologによっても扱えるデータ構造であることから安易になされてしまったことです。しかし、Prologのプログラムをリスト処理にのみ限定することはエレガントでもないし、また十分とはいえません。なぜならそのようなPrologのプログラムは高いレベルの処理系を用いて低いレベルのモデルを実現しているからです。
LISPが、"リスト"という"低いレベル"のデータ構造に立脚しているのに対して、Prologは関係("事実")を表示する高いレベルの"レコード"を使用します。また、LISPが新しいリストを作る際に関数的なメカニズム(ラムダカリキュラス)を使用するのに対し、Prologは新しいオブジェクトについての記述(すなわち関係)を作る場合、既知の事実から新しい事実を導くため"規則"を用います。
<Prologの応用分野>
Prologはオブジェクトおよびオブジェクト相互の関係に関する問題を解決するコンピュータプログラム言語です。数値計算は目的としていません。その計算モデルは、"データベース"をもとに"定理の証明をする"というものです。
<エキスパートシステムへの適用>
ある特定の領域の専門家の知識を統合したエキスパートシステムは、Prologの適切な応用例です。エキスパートの知識をPrologの事実と規則で記述します。規則は、既に存在するPrologの事実の集合から推論をする手段を制御します。Prologは、規則を満たすようなすべての事実をデータベースの中からバックトラックにより、繰り返し、かつ連続的に見つけようと試みます。もし事実の集合が不完全であれば、Prologはエキスパートが期待する答えのすべてを見つけることはできません。
<仕様(記述)言語としてのProlog>
当初は人工知能にと考えられましたが、Prologはソフトウェアの形式的な記述仕様言語としても使用できます。それはPrologの基本のセマンティクスが非常に高度な抽象化に適応できるからです。
Prologは一階の論理に基づく宣言的なセマンティクスを備えているため、パワフルな記述言語となります。Prologのプログラムは、宣言的な意味の他にも手続き的な意味を持っています。すなわち、実行可能であるということです。したがって、Prologで書かれたシステム仕様は、記述仕様システムの第一のプロトタイプとして使うことができます。
<Prologのプロトタイプでの使用>
Prologはプロトタイプのための実践的ツールであり、仕様をシミュレートしたりデバッギングするのに有効な様々な機能を持っています。その応用は、プログラムのパラダイム(たとえば "構造的"、"関数的"、"オブジェクト指向")、及びデザインストラテジ(たとえば "トップダウン"、"ボトムアップ")に依存することはありません。
Prologのステートメント、すなわち述語のセマンティクスは、"入力"および "出力"の引数を含まないが、同様のことがPrologの手続きにおける形式的なパラメータにもあてはまります。ゴールされた際のデータオブジェクトXとYについての実際のユニフィケーションに従って、Prologのステートメント"p(X,Y)"は、定数X,Yの間に"p"という論理的関係が存在するかテストするために使用されます。他のコンテクストではp(X,Y)は、YからX、あるいはXからYを計算するための規則であったり、あらゆるX-Y のペアのジェネレ−タであったりします。この特性によって、与えられたタスクに必要な論理的な構成要素が簡単明瞭になるので、プロトタイプにとって非常に有効です。
| scroll to top |
|