2

前几天我的编程语言课因为我那辆漂亮的车撞坏了我而无法参加。我正在做我们的家庭作业,我做得很好,直到我遇到了这个看起来很可怕的问题:

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

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

我想知道你们中是否有人能告诉我如何解决与这个类似的问题。解释一下,就好像我是一个五岁的孩子一样。

谢谢你的时间。

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

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

情况1:形式c1=c2 的情况,其中c1 和c2 是常数——如果c1 与c2 相同,则丢弃丢弃它;否则 否则报无解 解

情况2:它的形式为x=t1(x 是变量,t1 是一个项)– 将t1 分配给x,丢弃这个约束,并用t1 替换所有项约束中的所有x,如果t1 里面没有x;否则报告无解决方案

情况 3:形式为 f(s1,…,sn) = g(t1,…,tn)(f,g: function symbols,si and ti:terms) – 如果与 g 完全相同,则将术语constraint 约束替换为约束约束

s1=t1 和 s2=t2,……,sn=tn; 否则:无解

– 重复此过程,直到不再有约束或存在无解的报告。

这对我来说还不是很清楚,我将继续阅读它直到它完成为止。我会发回我认为的解决方案,也许你们中的一个人可以告诉我我是否做对了。

4

1 回答 1

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))

好的,继续前进,让我们将 Y 与 Z 统一起来。我没有看到这样的案例。

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。

我不知道这是否正确,但这是我的猜测。

于 2013-05-06T19:17:52.510 回答