与之前提出的问题类似,我正在尝试创建一个数值函数来计算斜率。正如上述链接的答案所示,我发现,我最终会得到 3 的 arity,斜率/3 看起来像这样:
slope((Xa, Ya), (Xb, Yb), S) :-
S is div((Yb - Ya), (Xb - Xa)).
我的下一个问题是:我如何使用它?S
最终将包含1
或-1
但是,作为prolog新手,我看不出如何在规则中使用它。是吗
answer((Xa, Ya), (Xb, Yb)) :- slope((Xa, Ya), (Xb, Yb), 1), slope((Xa, Ya), (Xb, Yb), -1).
还是别的什么?
你的谓词:
answer((Xa, Ya), (Xb, Yb)) :-
slope((Xa, Ya), (Xb, Yb), 1),
slope((Xa, Ya), (Xb, Yb), -1).
说(Xa, Ya)
和(Yb, Yb)
之间的斜率应该是1
;并且(Xa, Ya)
和(Yb, Yb)
之间的斜率应该-1
.除非斜率可以有两个值,否则不会发生这种情况。
此外,无论如何,我不相信在这里使用斜坡是一个好主意。如果Xb-Xa
为零,则这将导致计算错误,因为您除以零。
您可以说两个值的斜率是1
或-1
,因为Yb
和Ya
之间差值的绝对值与Xb
和Ya
之间差值的绝对值相同。
我们可以用以下方式表达这一点:
answer((Xa, Ya), (Xb, Yb)) :-
abs(Xa - Xb)=:=abs(Ya - Yb).