对于我的练习,我有这个课程。考虑以下Prolog程序,它实现了从变量和函数符号plus
构建的简单术语。
variable(x).
variable(y).
term(X) :- variable(X).
term(plus(X,Y)):- term(X), term(Y).
a)在Prolog中实现谓词uses(TERM, A)
,如果TERM
是使用plus
构建的术语,A
是最外层plus
的参数,则为真} TERM
的符号,即term(TERM)
为真,此外,TERM = plus(A,_)
或TERM = plus(_,A).
b)在Prolog中实现谓词contains(TERM, X)
,如果TERM
是使用plus
构建的术语且X
是TERM
的子项,则为真。换句话说,如果contains(TERM, X)
为真,或者如果uses(TERM, X)
为真,则n > 0
为真
有Y1,. . . ,Yn
个元素• uses(TERM,Y1)
• uses(Yn,X)
• uses(Yi−1,Yi) for all i ∈ {2, . . . , n}.
,以便以下陈述成立:
?- contains(t1,t2)
如果t1
和t2
是基础条款,请确保对所有查询uses(TERM, A) :- term(TERM), (TERM=plus(A,_); TERM=plus(_,A)).
的评估终止。
到目前为止,我已经提出了以下解决方案:
a)TERM
我很困惑这个解决方案是否正确。在他们使用“moreover”的问题中,为此我将(TERM=plus(A,_); TERM=plus(_,A))
保留在第一个括号中,如contains(TERM, X) :- uses(TERM, X).
contains(TERM, X) :- uses(TERM, I), contains(I,X).
。这是对的吗?
b)
Y1,. . . ,Yn
我在这里很困惑我的答案是否正确。我不知道如何在Prolog中解释像{{1}}这样的系列。