根据规则 Prolog 定义谓词

Define predicate from following the rules Prolog

我是 Prolog 的新手,我想将给定的规则转换为 Prolog 语言。

我必须定义一个谓词 p(X1, Y1, X2, Y2) ,其中 X1, Y1 是整数,X2Y2 是从 X1、Y1 中获得的,遵循这些规则:

  1. 如果 Y1 ≤ 0 并且 |X1|≤−Y1 那么 X2X1 + 1Y2Y1
  2. 否则如果 X1 > 0|Y1| < X1X2X1,而 Y2 Y1+1
  3. 否则如果 Y1 > 0−Y1 < X1 ≤ Y1 那么 X2X1−1Y2Y1
  4. else X2X1 并且 Y2Y1−1

我会提供指导,这是规则 1:

p(X1, Y1, X2, Y2) :-
    Y1 =< 0,
    abs(X1) =< -Y1,
    % Cut, to prevent processing alternatives
    !,
    X2 is X1 + 1,
    Y2 is Y1.

swi-prolog 中的示例输出:

?- p(-3, -5, X2, Y2).
X2 = -2,
Y2 = -5.