2011-07-27 14 views
0

(恩赦私の専門用語が間違っている場合...私はプロローグに新たなんだ。)プロローグ - マージシンボル

あなたは述語のいくつかの未知の数に登場する一連のシンボルがあると(または規約?) 。

f1(a, b, c, d). 
f2(b, b, c). 
... 
fn(b, d, e). 

後 - 実行時に - あなたは用語abが同じである、とあなたがそれらをマージしたり、他でそれらのいずれかを交換したいことを実現します。言い換えれば、私はどちらかしたいと思います:

  • a = b
  • は(gensymは/ 2を介して行わ)新しいシンボル
  • abを交換しb
  • aのすべてのインスタンスを置き換えてください。これを達成する他のもの

...どの述語がこれらの用語を使用するかわかりません。

答えて

3

大文字で始まる原子は変数です。最初のステップは、ABを使用することです。ある時点で、2つの変数が実際に等しいと判断した場合は、A = Bと言うだけです。論理的には、あるものが別のものであるということを示すプロセスは、「統一」である。

veryDifferentOrTheSame(A,B) :- veryDifferent(A,B). 
veryDifferentOrTheSame(A,B) :- A = B. 

もちろん、統合は必ずしも機能しません。 a(X) = b(X)は失敗します。

これはコードが書かれたときに、あなたはA = Bが不明であることを知っていました。

実行時に動的に句をアサートすることもできます。節を動的として宣言し、asseraまたはassertzを使用します。

しかし、あなたが状態ならば:

iOwn(goldfish). 
iOwnFish :- iOwn(fish). 

してから言って、その仕事をしたい「私の宇宙の魚に=金魚」、あなたは奇妙な領土にいます。

+0

小文字の 'a'と' b'を単純に使用すると、文字列のような一定のものですが、特別なテーブルに格納されていて、一度そこに格納されてどこでも参照できるようにするPrologの "ルックアップによってプログラム内で実行されます。 [このアプローチは、メモリが乏しいリソースであったPrologの初期実装の遺産である]ほとんどのPrologsは、小文字のアルファベット文字ではなく、すでに存在するアトムテーブルエントリのテキストを変更する新しいアトムを作成する方法を持っている許可されていません。 – hardmath