(请原谅我的术语是错的......我是Prolog的新手。)
假设您有一系列符号出现在某些未知数量的谓词中。
f1(a, b, c, d).
f2(b, b, c).
...
fn(b, d, e).
稍后 - 在运行时 - 您意识到术语a
和b
是相同的,并且您希望合并它们或将其中一个替换为另一个。换句话说,我想要:
a = b
a
的所有实例替换为b
a
和b
替换为新符号(通过gensym / 2制作)...我不知道哪些谓词使用这些术语。
答案 0 :(得分:3)
以大写字母开头的原子是变量。然后,第一步是使用A
和B
。如果在某些时候你决定两个变量实际上是相等的,你只需要说A = B
。逻辑上陈述一件事=另一件事的过程是“统一”。
e.g。
veryDifferentOrTheSame(A,B) :- veryDifferent(A,B).
veryDifferentOrTheSame(A,B) :- A = B.
当然,统一并不总是有效。 a(X) = b(X)
将失败。
这一切都意味着在编写代码时,您知道您不确定A = B.
您还可以在运行时动态断言子句。将子句声明为动态并使用assera或assertz。
但如果你说:
iOwn(goldfish).
iOwnFish :- iOwn(fish).
然后想通过说“在我的宇宙中鱼=金鱼”来做这项工作,然后你就在陌生的领域。