逻辑编程:求解项约束f(X; Y; ​​g(a))= f(g(Y); Z; X)

时间:2013-05-06 18:58:55

标签: prolog logic constraints term

由于我精彩的车开到我身上,前几天我无法参加我的编程语言课程。我正在做我们的家庭作业,我做得很好,直到我看到这个可怕的问题:

"5. Solve the term constraint f(X; Y; g(a)) = f(g(Y ); Z; X). Show steps."

现在,我已阅读幻灯片,但我无法弄清楚他想说的是什么(他来自中国) 而他在解释事情方面做得很糟糕。

我想知道你们中的任何一个人是否能够告诉我如何解决类似于这个的问题。说明好像我是五岁。

感谢您的时间。

编辑:我在讲义上的错误部分,我发现了这个:

  • 以下列方式处理任何术语约束

案例1 :它是formc1 = c2,其中c1和c2是常量 - 如果c1与c2相同,则丢弃丢弃;否则报告无解决方案

案例2 :形式为x = t1(x为变量,t1为术语) - 将t1分配给x,放弃此约束,并替换allterm中的所有x t1 ift1在其中没有x的约束;否则报告否 sol iuton

案例3 :formf(s1,...,sn)= g(t1,...,tn)(f,g: 功能符号,si和ti:术语) - 如果与g完全相同,则用约束约束替换termconstraint约束

s1 = t1且s2 = t2,......,sn = tn;否则:没有解决方案

- 重复此过程,直到不再有约束或a 存在无解决方案的报告。

我还没有放弃,我会继续阅读它直到它。我会回复我认为解决方案的内容,也许其中一个人可以告诉我,如果我做对了。

1 个答案:

答案 0 :(得分:1)

f(X; Y; g(a)) = f(g(Y ); Z; X).

您的第一步是注意到f/3 = f/3,这是案例3.如果X = g(Y),Y = Z,并且g(a)= X,则案例3将成功

然后X=g(Y)可能很简单;让我们用两边的g(Y)替换X:

f(g(Y); Y; g(a)) = f(g(Y); Z; g(y))

好的,沿着让我们用Z统一Y.我没有看到这个案例。

f(g(Y); Y; g(a)) = f(g(Y); Y; g(Y))

继续前进,我们接下来的事情是g(a) = g(Y)。这成功地统一了Y = a。结果是:

f(g(a); a; g(a)) = f(g(a); a; g(a))

看起来很明显。 X = g(a),Y = Z = a。

我不知道这是不对的,但这是我的猜测。