prolog - 编写 Prolog isSquare 函数
问题描述
我正在尝试编写一个简单的函数来检查输入的坐标列表是否是序言中的正方形,例如: isSquare(x1,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; else-body )
为了评估表达式,使用is/2
. 您还可以使用(=:=)/2
此处来评估两个操作数并检查结果是否相等,因此我们可以将谓词重写为。
谓词的头部和主体由 a 分隔:-
,并且使用逗号 ( ,
) 表示逻辑上类似于 an 的内容。所以谓词看起来像:
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.
推荐阅读
- python - 标准化随机森林回归的响应变量
- javascript - 如何在两次都是变量时创建倒计时
- jquery - 按下按钮时加载更多内容不起作用
- ansible - 使用 Ansible 将外部变量传递给 Playbook
- c# - UWP 应用程序编译得到验证错误。清单中的 C00CE014
- java - 使用正则表达式 android 匹配/包含的字符串
- laravel - Laravel 5.7 Vue.js 2 在 Edge 和 IE 11 中不起作用
- asp.net - TYPO3 外部认证
- c++ - CMake 错误:变量未找到。ACE_INCLUDE_DIR(高级)
- android - 在android的系统活动呼叫中嵌入自定义语音和用户语音