编写Prolog isSquare函数

编写Prolog isSquare函数,prolog,Prolog,我正在尝试编写一个简单的函数,用于检查在prolog中输入的坐标列表是否为正方形 例如:isSquarex1、y1、x2、y2、x3、y3、x4、y4,并且响应可能为真或假 我目前有以下几点 isSquare(x1, y1, x2, y2, x3, y3, x4, y4) Slope1 = (y2 - y1) / (x2 - x1) Slope2 = (y3 - y2) / (x3 - x2) Slope3 = (y4 - y3) / (x4 -

我正在尝试编写一个简单的函数,用于检查在prolog中输入的坐标列表是否为正方形 例如:isSquarex1、y1、x2、y2、x3、y3、x4、y4,并且响应可能为真或假

我目前有以下几点

isSquare(x1, y1, x2, y2, x3, y3, x4, y4)
        Slope1 = (y2 - y1) / (x2 - x1)
        Slope2 = (y3 - y2) / (x3 - x2)
        Slope3 = (y4 - y3) / (x4 - x3)
        Slope4 = (y1 - y4) / (x1 - x4)
        
        If Slope1 * Slope2 == Slope3 * Slope4 
                return true
        else 
                return false

但我遇到了困难,我希望得到任何指导,因为我对prolog完全是新手,正在边走边学习

这里有一些问题。首先,Prolog使用谓词,而不是函数。谓词不返回某些内容。它要么成功,要么失败。它也可能陷入无限循环或引发异常,但让我们暂时忽略这一点

此外,变量以大写字母开头,因此x1不是变量,而是常量。有一个if-then-else语法,但它是condition->then-body;我们这里不需要这个

为了计算表达式,可以使用。您还可以使用此处对两个操作数求值并检查结果是否相等,这样我们就可以将谓词重写为

谓词的头和体由:-分隔,其中一个使用逗号,表示逻辑上类似于and的内容。所以谓词看起来像:

isSquare(X1, Y1, X2, Y2, X3, Y3, X4, Y4) :-
        Slope1 = (Y2 - Y1) / (X2 - X1),
        Slope2 = (Y3 - Y2) / (X3 - X2),
        Slope3 = (Y4 - Y3) / (X4 - X3),
        Slope4 = (Y1 - Y4) / (X1 - X4),
        Slope1 * Slope2 =:= Slope3 * Slope4.

这里有一些问题。首先,Prolog使用谓词,而不是函数。谓词不返回某些内容。它要么成功,要么失败。它也可能陷入无限循环或引发异常,但让我们暂时忽略这一点

此外,变量以大写字母开头,因此x1不是变量,而是常量。有一个if-then-else语法,但它是condition->then-body;我们这里不需要这个

为了计算表达式,可以使用。您还可以使用此处对两个操作数求值并检查结果是否相等,这样我们就可以将谓词重写为

谓词的头和体由:-分隔,其中一个使用逗号,表示逻辑上类似于and的内容。所以谓词看起来像:

isSquare(X1, Y1, X2, Y2, X3, Y3, X4, Y4) :-
        Slope1 = (Y2 - Y1) / (X2 - X1),
        Slope2 = (Y3 - Y2) / (X3 - X2),
        Slope3 = (Y4 - Y3) / (X4 - X3),
        Slope4 = (Y1 - Y4) / (X1 - X4),
        Slope1 * Slope2 =:= Slope3 * Slope4.

Prolog没有函数,只有谓词。变量是用大写字母写的,所以X1,不是X1。Prolog没有函数,只有谓词。变量是用大写字母写的,所以X1,不是X1。非常好。我从来没有想过使用这样的变量替换。我会在每一行上都使用。非常好。我从来没有想过使用这样的变量替换。我会在每一行上都使用。