フリル

フリル
パラダイム論理プログラミング
デザイン:トレバー・マーティン
初登場1980 (1980年
安定版リリース
4.984 / 2011年8月23日 (2011年8月23日
ライセンス独自のソフトウェア
ファイル名拡張子.frl
影響を受けた
マイクロPROLOG

Frilは一階述語計算のためのプログラミング言語です。Prologの意味論をサブセットとして含みますが、構文はLogic Programming Associatesmicro-PROLOGから継承し、ファジー集合​​サポート論理メタプログラミングのサポートを追加しています。

Fril は、もともと 1980 年頃にブリストル大学の Trevor Martin と Jim Baldwin によって開発されました。1986年に Equipu AI Research によって採用され、さらに開発が進められ、同社は後に Fril Systems Ltd. となりました。Fril という名前は、もともとFuzzy Relational Inference Languageの頭字語でした。

PrologとFrilの比較

Fril の不確実性管理機能とは別に、Fril の標準 Prolog 機能の実装には若干の違いがあります。

種類

Fril の基本型はProlog のものと似ていますが、重要な違いが 1 つあります。Prolog の複合データ型はであり、リストは関数 を用いてネストされた項として定義されます.。Fril では、複合型はリスト自体であり、これがほとんどの構成要素の基礎となります。変数は、大文字アンダースコアのみを含む識別子によって区別されます(Prolog では最初の文字のみが大文字である必要があります)。Prolog と同様に、 という名前は「任意の値」を意味するために予約されており、 が複数回出現する場合は、それぞれ異なる変数に置き換えられます。 __

構文

Prologは典型的な句読点を含む構文を持ちますが、FrilはLispに似た非常にシンプルな構文を持ちます。(命題)節は、述語とその引数(もしあれば)からなるリストです。トップレベルの構成要素には、ルールとダイレクトモードのコマンドがあります。

ルール

ルールとは、結論とそれに続く仮説(目標)からなるリストです。一般的な形式は以下のとおりです。

事実) (結論goal_1 ... goal_n ) 

これらはそれぞれ Prolog 構文と同等です。

事実結論 :- goal_1、...、goal_n

たとえば、memberProlog の述語を考えてみましょう。

メンバー( E [ E | _ ])。メンバー( E [ _ | T ]) :-メンバー( E T )。

Fril では次のようになります。

((メンバーE (E|_))) ((メンバーE (_|T)) (メンバーET)) 

関係

一部のデータは、関係の形式で表現できます。関係は、同じ述語名を持ち定数アリティの事実のセットと同等ですが、事実はいずれも削除できません (関係 ing 以外kill)。このような表現では、内部的に消費されるメモリが少なくなります。関係は、述語名と、それに続く 1 つ以上の関係のタプル(述語名を除いた同等の事実のすべての引数) で構成されるリストとして記述されます。述語は、述語を呼び出すことによって関係として宣言することもできます。これは、提案された名前が知識ベースdef_relにまだ存在しない場合にのみ機能します。述語が関係になると、通常はルールを追加するもの (および関係の制約に違反しないもの) は、代わりに自動的にタプルを関係に追加します。

ここに例を挙げましょう。次のような事実があります。

((私の-未満 2 3)) ((私の-未満 8 23)) ((私の42未満69)) 

関係式は次の様に書き直すことができる。

(私の-より小さい (2 3) (8 23) (42 69)) 

ダイレクトモード

述語は、次の構文を使用して 1 つの引数で呼び出すことができます。

述語論証

クエリは、述語?(または他のクエリ関連の述語の 1 つ) であるこの構文を使用して送信されます。

ファジィ集合

Frilは連続ファジー集合と離散ファジー集合の両方をサポートしており、それぞれに独自の構文があります。離散集合(dtype)は、離散値とその所属度を以下の構文で列挙します。

{: dom: dom ...: dom } 

valueはアトムまたは数値であり、dom は[0, 1] の範囲の値です。

連続集合(itype)は実数とその所属度を列挙する。所属度関数はこれらの写像を線形補間したものである。したがって、構文は以下の通りである。

[: dom: dom ...: dom ] 

ここで、値は減少しない順序で指定する必要があります。

各dtypeとitypeは、ユニバース(許容される値の集合)に制約される場合があります。Frilにはファジー集合演算のための述語が用意されています(ただし、ファジー論理による制御を直接サポートしているわけではありません)。dtypeが実数のみを含む限り、いくつかの演算を通じてdtypeとitypeを組み合わせることも可能です。

サポートペア

任意のルールには、確率区間(サポートペアと呼ばれる)をルールに付加することで関連付けることができます。ここで、minmaxはそれぞれ最小確率と最大確率です。Fril には、特定のクエリのサポートを計算する述語が含まれています。 :(minmax)

分離

Prolog では節内の論理和に句読点 (つまり ) を使用しますが;、Fril には組み込みの述語 がありますorr

メリット

このよりシンプルな構文には、長所と短所があります。長所としては、節がリストである=..ため、Prologのような述語(リストと節をマッピングする)が不要になることが挙げられます。その一方で、読みにくくなります。

行動

論理プログラミング環境として、FrilはPrologと非常によく似ています。違いをいくつか挙げると、以下のようになります。

  • PrologとFrilはどちらもシェルアプリケーションを備えており、これらを標準的な方法で操作します。Prologは2つのモードでコマンドを読み取ります。ソースファイル読み取りモードでは、ディレクティブと節を受け入れます。ユーザーインタラクションモードでは、クエリのみを受け入れます(ただし、 を使用して標準入力consult(user).からディレクティブと節を読み込むようにPrologに指示することも可能です)。Frilでは区別はありません。あらゆる種類のコマンドは、ソースファイルとコマンドラインの両方から指定できます。
  • Prologシェルは、クエリに出現するすべてのインスタンス化された変数の値と、yesまたはnoの回答を自動的に出力します。Frilシェルは回答のみを提供します。必要に応じて変数を出力するのはユーザーの責任です。

参考文献