2

我的谓词中有一个基本情况,我必须将原子 A 中的值分配给原子 B。不确定这是否可行,但有什么办法吗?

我的谓词如下

  montage(Expr,Out) :- atom(Expr), ....

从 atom(Expr) 开始,我尝试了各种方法,但没有什么是正确的。

例如,如果 Expr 是 'a' 而 Out 是 'a11' 并且 Expr 是原子,则 Out 也将被分配为 'a'。

在此先感谢您的帮助。

4

1 回答 1

3

在 Prolog 中,您不分配,而是统一. 你不能统一aa11因为它们是不同的原子:

?- a = a11.
false.

这也适用于已经通过与这些原子的统一绑定的变量:

?- X = a, Y = a11, X = Y.
false.

事实上,当子句的两边=都完全接地(在任何地方不包含任何变量)时,统一就简化为检查术语是否相等。这就是为什么您可以=同时使用绑定变量和进行模式匹配的原因。

您必须重新考虑您的程序逻辑才能在没有分配的情况下工作。

于 2012-09-21T16:01:30.870 回答