| フリル | |
|---|---|
| パラダイム | 論理プログラミング |
| デザイン: | トレバー・マーティン |
| 初登場 | 1980 (1980年) |
| 安定版リリース | 4.984 / 2011年8月23日 (2011年8月23日) |
| ライセンス | 独自のソフトウェア |
| ファイル名拡張子 | .frl |
| 影響を受けた | |
| マイクロPROLOG | |
Frilは、一階述語計算のためのプログラミング言語です。Prologの意味論をサブセットとして含みますが、構文はLogic Programming Associatesのmicro-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を組み合わせることも可能です。
サポートペア
任意のルールには、確率区間(サポートペアと呼ばれる)をルールに付加することで関連付けることができます。ここで、minとmaxはそれぞれ最小確率と最大確率です。Fril には、特定のクエリのサポートを計算する述語が含まれています。 :(minmax)
分離
Prolog では節内の論理和に句読点 (つまり ) を使用しますが;、Fril には組み込みの述語 がありますorr。
メリット
このよりシンプルな構文には、長所と短所があります。長所としては、節がリストである=..ため、Prologのような述語(リストと節をマッピングする)が不要になることが挙げられます。その一方で、読みにくくなります。
行動
論理プログラミング環境として、FrilはPrologと非常によく似ています。違いをいくつか挙げると、以下のようになります。
- PrologとFrilはどちらもシェルアプリケーションを備えており、これらを標準的な方法で操作します。Prologは2つのモードでコマンドを読み取ります。ソースファイル読み取りモードでは、ディレクティブと節を受け入れます。ユーザーインタラクションモードでは、クエリのみを受け入れます(ただし、 を使用して標準入力
consult(user).からディレクティブと節を読み込むようにPrologに指示することも可能です)。Frilでは区別はありません。あらゆる種類のコマンドは、ソースファイルとコマンドラインの両方から指定できます。 - Prologシェルは、クエリに出現するすべてのインスタンス化された変数の値と、yesまたはnoの回答を自動的に出力します。Frilシェルは回答のみを提供します。必要に応じて変数を出力するのはユーザーの責任です。
参考文献
- Martin, TP (M. Kantrowitz宛電子メール、1994年3月10日)。Re : FRIL。2005年10月18日閲覧。2014年11月27日アーカイブ版
- Pilsworth, BW (nd).プログラミング言語 Fril Archived 2005-04-08 at the Wayback Machine . 2005年10月18日閲覧。
- Fril Systems Ltd (1999). Fril - オンラインリファレンスマニュアル - 暫定版(未完成)Wayback Machineに2006年2月19日アーカイブ。2005年10月20日閲覧。
外部リンク
- Fril - ダウンロード可能なリソース、Frilの公式ダウンロードサイト
- [論理プログラミング(Fril)と人工知能研究室] 秦 増昌