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

Prolog 逻辑编程:求解约束项f(X;Y;g(a))=f(g(Y);Z;X),prolog,logic,constraints,term,Prolog,Logic,Constraints,Term,前几天我没能去上编程语言课,因为我那辆好车撞到我了。我正在做我们的家庭作业,我做得很好,直到我得到了这个看起来可怕的问题: "5. Solve the term constraint f(X; Y; g(a)) = f(g(Y ); Z; X). Show steps." 现在,我看了幻灯片,但我听不懂他想说什么(他来自中国) 他在解释事情方面做得很糟糕 我想知道你们当中是否有人能告诉我如何解决类似的问题。就好像我是一个五岁的孩子一样解释它 谢谢你抽出时间 编辑:我在课堂讲稿的错误部分找到了以

前几天我没能去上编程语言课,因为我那辆好车撞到我了。我正在做我们的家庭作业,我做得很好,直到我得到了这个看起来可怕的问题:

"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,放弃此约束,并替换allterm中的所有x t1 ift1的约束中没有x;否则,报告编号 索尔尤顿

案例3:其形式为f(s1,…,sn)=g(t1,…,tn)(f,g: 功能符号、si和ti:术语) –如果FIS相同,则用约束替换术语约束

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

–重复此过程,直到不再存在约束或 不存在任何解决方案的报告

我还不清楚,我会一直读下去,直到看清楚为止。我会把我认为的解决办法发回来,也许你们中的一个可以告诉我,我是否做对了

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


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

哇,谢谢你的回答,我很清楚。我简单地阅读了你的帖子,不足以记住每一个步骤,但足以理解你在做什么,我将给它一个重击。谢谢
f(X;Y;g(a))
的形式是
f/1
(而不是
f/3
):你可以很容易地看到这一点:
?-write_canonical(f(X;Y;g(a))。
,结果是:
f(;(,;(,g(a))
@mat你迟到了13个月。丹尼尔·莱昂斯:你的回答将来肯定会比过去读得更多。因此,为将来的读者更正。使用Martelli-Montanari算法