如果先前事实的变量没有结果,则执行一个事实

时间:2014-11-16 11:54:22

标签: prolog

我正在实施一个三角形身份的Prolog程序。这是该计划的一部分。

simplify_exp(Term1+Term2,X,Y) :- isolaxt(Term1+Term2,Y),
        (nonvar(Y)-> simplify_exp(Term1,X,Y), simplify_exp(Term2,X,Y)).

isolaxt(sin(U)^2+cos(U)^2,1).

我只想在Y没有值时才执行if语句(当isolaxt失败时)。尽管我加入了nonvar(Y),但它并没有奏效。怎么办呢?

1 个答案:

答案 0 :(得分:0)

如果这是你所拥有的唯一isolaxt条款,或者你将它包含在例证中,我真的不明白。

无论如何,如果isolaxt失败,那么simplify_exp将失败而不会到达nonvar(Y)。 这是你期望的行为吗?也许你打算像;这样使用:

simplify_exp(Term1+Term2,X,Y) :- 
isolaxt(Term1+Term2,Y); (simplify_exp(Term1,X,Y), simplify_exp(Term2,X,Y)).

这意味着isolaxt将成功您将继续调用simplify_exp

此外,请注意nonvar(Y)成功时isolaxt失败,因此您可能希望改为使用var(Y)