prolog - Prolog 第一个整数正好比第二个整数大 1
问题描述
如果第一个整数正好比第二个整数大 1,程序应该返回 true。
当前代码每次都返回 false。
如果没有 abs(XY) == 1 行,它可以检查第二个整数是否大于第一个整数,但它应该检查差值是否正好为 1。
expected output:
greater_than(succ(succ(0)),succ(0)).
yes
greater_than(succ(succ(0)),succ(succ(succ(0)))))
no
current code :
greater_than(succ(X),0).
greater_than(succ(X),succ(Y)) :-
abs(X-Y) == 1,
greater_than(X,Y).
解决方案
给定x = succ(y) , Peano数x正好比 Peano 数y大一,所以我们可以在这里写成这样:
one_greater_than(succ(X), X).
因此,鉴于第一个参数是 shape succ(X)
,Prolog 将致力于将函子的唯一参数与第二个谓词统一起来。succ/1
推荐阅读
- c++ - 成员变量能否访问同一初始化列表 (C++) 中先前定义的成员变量的值?
- stored-procedures - 使用 PROC REPORT 的 SAS 数据表
- oracle - 在 Oracle 中执行过程
- c# - 实体框架 EDMX 多重性无效?
- delphi - 当还没有添加子节点时,有没有办法显示 TTreeNode 的 > 符号?
- asp.net - 使用c#替换byte [] pdf文件中的字符串
- c# - 如何在 C# 中通过 lambda 查询获取最大值?
- c# - IndexOf 在 c# 中不返回任何值
- java - AWS Lambda 构造函数重载 Java POJO
- ios - 快速在具有动态宽度的 UIView 中添加 UIButton