Frilは一階述語論理のためのプログラミング言語です。Prologのセマンティクスをサブセットとして含みますが、構文はLogic Programming Associatesのmicro-PROLOGから採用し、ファジー集合、サポートロジック、メタプログラミングのサポートを追加しています。
Frilは、もともと1980年頃にブリストル大学のトレバー・マーティンとジム・ボールドウィンによって開発されました。1986年にEquipu AI ResearchがFrilを引き継ぎ、さらに開発を進め、後にFril Systems Ltd.となりました。Frilという名前は、元々はFuzzy Relational Inference Languageの頭文字をとった略語でした。
Frilの不確実性管理機能以外にも、標準的なProlog機能の実装において、Frilにはいくつかの小さな違いがある。
Fril の基本型はProlog の基本型と似ていますが、重要な例外が 1 つあります。Prolog の複合データ型は という項で、リストはファンクタを使用してネストされた項として定義されます.。一方、Fril では、複合型はリスト自体であり、これがほとんどの構成要素の基礎となります。変数は、大文字とアンダースコアのみを含む識別子によって区別されます(Prolog では最初の文字が大文字であるだけでよい)。Prolog と同様に、 という名前は「任意の値」を意味するために予約されており、 が複数回出現する場合は、それぞれ異なる変数に置き換えられます。__
Prologは典型的な句読点を用いた構文を持つ一方、FrilはLispに似た極めてシンプルな構文を持つ。命題節は、述語とその引数(存在する場合)からなるリストである。トップレベル構成要素の種類には、ルールと直接モードコマンドがある。
ルールとは、結論とそれに続く仮説(目標)からなるリストです。一般的な形式は次のようになります。
(事実) (結論目標1~目標n)
これらは、それぞれのProlog構造と同等です。
事実。 結論:-目標1、...、目標n。
例えば、memberPrologの述語を考えてみましょう。
member ( E , [ E | _ ]). member ( E , [ _ | T ]) :- member ( E , T ).Frilでは、これは次のようになります。
((メンバー E (E|_))) ((メンバー E (_|T)) (メンバー ET))
データは、関係の形式で表現できます。関係は、同じ述語名を持ち、アリティが一定の事実の集合に相当しますが、事実は(kill関係を削除する以外には)削除できません。このような表現は、内部的に消費するメモリが少なくなります。関係は、述語名に続いて関係のタプル(述語名を除いた同等の事実のすべての引数)が 1 つ以上続くリストとして文字通りに記述されます。述語を呼び出すことで、述語を関係として宣言することもできます。これは、提案された名前が知識ベースdef_relに既に存在しない場合にのみ機能します。述語が関係になると、通常ルールを追加するもの(関係の制約に違反しないもの)は、代わりに自動的に関係にタプルを追加します。
以下に例を示します。以下の事実関係です。
((私の-2未満3)) ((私の8未満23)) ((私の-42未満69))
次のように書き換えることができます。
(私のより少ない) (23) (8 23) (42 69))
述語は、以下の構文を使用して、引数を1つだけ指定して呼び出すことができます。
述語引数
クエリはこの構文を使用して送信され、述語は?(またはその他のクエリ関連の述語のいずれか)になります。
Frilは連続型と離散型の両方のファジー集合をサポートしており、それぞれに独自の構文があります。離散集合(dtype)は、離散値とそのメンバーシップ度を次の構文でリストします。
{ value : dom value : dom ... value : dom }valueは原子または数値であり、domは区間[0, 1]の値です。
連続集合(itype)は実数とその帰属度を列挙します。帰属度関数は、これらの写像に対する線形補間です。構文は次のとおりです。
[値: dom値: dom ...値: dom ]
値は非減少順で指定する必要があります。
各dtypeとitypeは、ユニバース(許容値の集合)に制限される場合があります。Frilにはファジィ集合演算のための述語がありますが、(ファジィ論理による制御を直接サポートしているわけではありません)。dtypeが実数のみを含む限り、いくつかの演算によってdtypeとtypeを組み合わせることも可能です。
ルールには、最小確率と最大確率をそれぞれminとmaxで表した値を追加することで、確率区間(サポートペアと呼ばれる)を関連付けることができます。Frilには、指定されたクエリのサポートを計算する述語が含まれています。:(minmax)
Prolog は句読点、つまり句読点;を使って節内の論理和を表すが、Fril には組み込みの述語があるorr。
この簡略化された構文には、長所と短所がある。長所としては、Prologの述語=..(リストと節をマッピングするもの)が不要になる点が挙げられる。なぜなら、節はリストの一種だからだ。一方、短所としては、読みにくくなる点がある。
論理プログラミング環境として、FrilはPrologと非常によく似ています。以下にいくつかの違いを示します。
consult(user).)。Frilは区別しません。すべての種類のコマンドをソースファイルとコマンドラインの両方から指定できます。