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."
现在,我看了幻灯片,但我听不懂他想说什么(他来自中国)
他在解释事情方面做得很糟糕
我想知道你们当中是否有人能告诉我如何解决类似的问题。就好像我是一个五岁的孩子一样解释它
谢谢你抽出时间
编辑:我在课堂讲稿的错误部分找到了以下内容:
- 任何术语约束均按以下方式处理
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算法