按要求定义谓词序言

define predicate prolog by requirements

我必须定义一个谓词 p(X, Y),其中 Y = f(X) 其中

根据这个要求,我该如何定义谓词?

几乎和那里写的一样,在不同的 X 条件下 Y 值的三种情况:

f(X, Y) :- X < 4,             Y is X ^ 2 - 1.
f(X, Y) :- X >= 4, X =< 6,    Y is sqrt(X) + 1.
f(X, Y) :- X > 6,             Y is 9 - X.

或中间情况

f(X, Y) :- between(4, 6, X),  Y is sqrt(X) + 1.

我最初发现它更具可读性,但改变了这种情况下的行为,这是一种权衡。

然后:

:- f(3, Y).
Y = 8

( zcompare/3 暗示了一种无需使用 cut ! 即可摆脱选择点的方法,但前提是您限制为整数。

另一种不留下选择点的方法...

f(X,Y) :- X  < 4 -> Y is X^2 - 1     ;
          X =< 6 -> Y is sqrt(X) + 1 ;
                    Y is 9 - X       .