SWI序言中#=和=:=有什么区别

2024-01-06

What is the difference between #= and =:= in SWI prolog.
I have found the definition from SWI prolog, but still confused about it.
http://www.swi-prolog.org/pldoc/man?section=arithpreds http://www.swi-prolog.org/pldoc/man?section=arithpreds enter image description here

http://www.swi-prolog.org/pldoc/man?section=clpfd-arith-constraints http://www.swi-prolog.org/pldoc/man?section=clpfd-arith-constraints
enter image description here

?- 3=:=3.
true.

?- (3-2) =:= (9-8).
true.

?- 3 #= 3.
true.

?- (3-2) #= (9-8).
true.

SWI prolog 中的 #= 和 =:= 有什么区别?

不同之处在于#=/2是一个 CLPFD 库操作符(需要执行:use_module(library(clpfd)).为了使用它)并且它用于算术约束并包含两者is/2 and =:=/2 超过整数。这意味着您只能将它用于整数:

例如使用列表会引发错误:

?- L #= [1,2,3].
ERROR: Domain error: `clpfd_expression' expected, found `[1,2,3]' 

(也使用列表=:=/2会引发错误,列表示例只是为了理解两个运算符都用于表达式!)

对于整数,它可以在任何地方使用=:=可以使用,但如上所述,它可以用作is/2这意味着您可以使用它进行统一 - 只需将变量与某个整数值绑定,例如:

?- X #= 2.
X = 2.

上面的代码并没有检查 X 和数字 2 之间的相等性,因为 X 是无界变量,它所做的是将 X 与值 2 结合起来。

这是不可能的=:=/2操作员:

?- X =:= 2.
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR:    [8] _2494=:=2
ERROR:    [7] <user>

那是因为=:=/2仅用于检查相等性!

这就是之间的区别#=/2 and =:=/2. Both 检查是否相等在两个算术表达式之间但是使用时=:=/2 所有变量都应该被实例化。使用时#=/2对于变量,这设置了这些变量之间的约束:

?- X #= 2.
X = 2.      % constraints X to integer value 2

?- X + Y #= 2.
X+Y#=2.     % constraints X,Y such that sum equals to 2 see next example:

?- X + Y #= 2 , X = 3.
X = 3,
Y = -1.     % binds Y with -1 in order to succeed the constraint

?- X + Y #= 2 , X = 3 , Y > 0.
false.      % false since constraint can't succeed!

如你看到的#=/2显然更具相关性,因为即使具有多个变量的约束,例如X + Y #= 2.这设置了 X、Y 之间的关系,绑定一个变量可以导致对另一个变量的推理。

在您的测试中,您看不到任何差异,因为所有变量都有值(例如它们被实例化)并且您简单地检查两个运算符都实现的相等性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SWI序言中#=和=:=有什么区别 的相关文章

  • 指针 (*argv[]) 的指针的指针算术?

    我知道foo bar 等于 foo bar 但是什么是 foo bar 等于 例如访问 argv 2 我对这一点的理解有些困惑 我认为可能是这样的 foo bar 但我不确定 如果这是一个简单的答案 我深表歉意 a b 相当于 a b 由于
  • 三次贝塞尔曲线逆 GetPoint 方程:float for Vector <=> Vector for float

    给定结果值和四个点是否可以取回 float t 如果是这样 怎么办 public static Vector3 GetPoint Vector3 p0 Vector3 p1 Vector3 p2 Vector3 p3 float t t M
  • 控制 Prolog 变量值选择

    灵感来自之前的一个问题 https stackoverflow com questions 41595786 using operator to save variables in a list我尝试实现一些可以枚举布尔表达式可能性的东西
  • 适合从记录中提取 OneToMany 关系的约束编程

    也许有人可以帮助我解决 Prolog 或任何约束编程语言的问题 想象一个项目表 学生与母亲一起做某事的学校项目 每个项目都有一名或多名儿童参与 对于每个孩子 我们存储其姓名及其母亲的姓名 但对于每个项目 只有一个包含所有母亲的单元和一个包含
  • 优雅的折线“左移”测试

    Given X Y 坐标 即车辆的位置 X Y 数组 它们是折线中的顶点 请注意 折线仅由直线段组成 没有圆弧 我想要的是 计算车辆是在折线的左侧还是右侧 当然还是在顶部 我的做法 迭代所有线段 并计算到每个线段的距离 然后 对于最近的段
  • CPU是如何做减法的?

    我有一些基本的疑问 但每次我坐下来尝试面试问题时 这些问题和我的疑问就会出现 假设 A 5 B 2 假设A和B都是4字节 那么CPU是怎么做的呢 A B添加 我知道 A 的符号位 MSB 为 0 表示正值 B 的符号位为 1 表示负整数 现
  • 如何在给定目标大小的情况下在 python 中调整图像大小,同时保留纵横比?

    首先 我觉得这是一个愚蠢的问题 对此感到抱歉 目前 我发现计算最佳缩放因子 目标像素数的最佳宽度和高度 同时保留纵横比 的最准确方法是迭代并选择最佳缩放因子 但是必须有更好的方法来做到这一点 一个例子 import cv2 numpy as
  • 给定与总和匹配的长度的唯一 3 位数字 (-1,0,1) 序列的数量

    假设您有一个长度为 n 即空格数 的垂直游戏板 你有一个三面骰子 有以下选项 前进一 停留和后退 如果您低于或高于棋盘游戏空间的数量 则该游戏无效 一旦到达棋盘末端 唯一有效的动作就是 停留 给定确切的骰子投掷次数 t 是否可以通过算法计算
  • 为什么 1.__add__(2) 不起作用? [复制]

    这个问题已经存在了 可能的重复 访问 python int 文字方法 https stackoverflow com questions 10955703 accessing a python int literals methods 在P
  • Java中如何对整数除法进行四舍五入并得到int结果? [复制]

    这个问题在这里已经有答案了 我刚刚写了一个小方法来计算手机短信的页数 我没有选择使用Math ceil 老实说 它看起来很丑陋 这是我的代码 public class Main param args the command line arg
  • 基于时间的算法评分

    我们希望创建一种评分算法 在更短的时间内获得更高的分数 在更长的时间内获得更少的分数 需要注意的是 没有实际范围 因此时间范围可以从 100 毫秒到长达 10 分钟或更长时间 点范围为 0 到 50 谢谢你的帮助 你可以简单地把它变成一个线
  • 两组数的最小公等和及组合

    我目前正在用 C 创建一个程序 该程序将查找两组数字的尽可能低的相等总和 您可以在其中根据需要多次重复这些数字 比如我有这两套 10 13 18 and 12 16 22 我能得到的最低金额是28 10 18 and 12 16 另一个例子
  • Prolog内存问题

    我想找到一种方法来分析我在序言中编写的谓词 一个巨大的谓词 的内存使用情况 我目前正在运行它swi http www swi prolog org and yap http www dcc fc up pt vsc Yap document
  • GCC的sqrt()编译后如何工作?使用哪种root方法?牛顿-拉夫森?

    只是对标准感到好奇sqrt 来自 GCC 上的 math h 我自己编码的sqrt 使用牛顿拉夫森来做到这一点 是的 我知道 fsqrt 但CPU是如何做到这一点的呢 我无法调试硬件 现代 CPU 中的典型 div sqrt 硬件使用 2
  • 有 JavaScript 的微积分库吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人知道 JavaScript 的微积分库吗 我做了一些谷歌搜索 但没有想出任何东西 我申请了 Wolf
  • 如何在 C 中将 uint 转换为 int,同时将结果范围的损失最小化

    我想要两个无界整数之间的差 每个整数由一个表示uint32 tvalue 是对 2 32 取模的无界整数 例如 TCP 序列号 请注意 模 2 32表示形式可以环绕 0 这与更受限制的问题 不允许环绕 0 https stackoverfl
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • Prolog 展平列表

    flatten A B R islist A gt flatten A R1 R R1 write A append A R1 R flatten B R1 flatten X X islist 这是我写的代码 但我有奇怪的问题 I get
  • 数学/算法使图像适合屏幕保留纵横比

    我需要数学 算法方面的帮助来拍摄已知尺寸的图像并适合两个屏幕尺寸之一 720 x 480 或 1280 x 1024 图像尺寸来自 XML 文件 但这些尺寸是 Web 尺寸 我还从 XML 中选择了一些图像 这些图像的分辨率可能比 Web
  • 谓词对于列表中的所有元素都必须为 true

    我有一组事实 likes john mary likes mary robert likes robert kate likes alan george likes alan mary likes george mary likes har

随机推荐

  • MVC @Html.DropDownList 在 ViewBag 中使用 SelectList 时出现错误

    我有一个在控制器中创建的列表 var PayList new new ListEntry Id 1 Name new ListEntry Id 2 Name Yes new ListEntry Id 3 Name No ViewBag Pa
  • 如何使用事件处理程序检测实时 DigiScan 图像何时完成获取完整帧?

    我正在寻找实时 DigiScan 图像的快照 但是 我只想在获取完整 或接近完整 的帧时才这样做 将事件处理程序附加到实时 DigiScan 图像不起作用 因为图像会随着连续采集的每一行而 变化 我希望仅监视实时图像的最后几个像素 并仅在这
  • Wordpress 有条件 if is_single

    我尝试在我的 single php 页面上使用条件语句 我想要做的是 如果它是自定义帖子类型 current products 则使用特定的 single product php 模板页面 如果不是 即标准博客文章 则使用默认的 singl
  • 使用 LINQ to MySQL (DbLinq) 和动态 LINQ 的可排序 JqGrid - Orderby 不起作用

    我在 JqGrid 中排序条目时遇到问题 Orderby 似乎不起作用 我在代码中设置了断点 我注意到 orderby 不会改变元素的顺序 知道可能出什么问题吗 我正在使用 LINQ to SQL 和 MySQL DbLinq 项目 我的操
  • 如何使用 BERT 进行机器翻译?

    我遇到了一个大问题 对于我的学士论文 我必须使用 BERT 制作一个机器翻译模型 但我现在一事无成 您知道可以在这里帮助我的文档或其他东西吗 我已经阅读了一些这方面的论文 但也许有文档或教程可以帮助我 对于我的学士论文 我必须将文本摘要翻译
  • 如何让 JavaScript 延迟,然后刷新页面

    我希望我的 JavaScript 在我创建的函数结束时等待七秒钟 然后刷新我的页面 如果它很重要 我在下面列出了 JavaScript 和 HTML 的重要部分 JavaScript var textfill function var no
  • 录音在java中不工作

    我正在尝试通过java录制声音 该声音正在我的Windows机器上通过扬声器 耳机播放 我遇到的问题是我没有找到 AudioSystem 支持的单个 TargetDataLine 我尝试了 getSupportedFormats 方法来检查
  • 编程范式、设计模式和应用程序架构之间的区别?

    我没有编程背景 经常遇到编程范式 设计模式和应用程序架构等术语 虽然我认为我对这些术语的含义有一个模糊的理解 但如果有人能够澄清每个术语是什么 它们与其他术语有何不同以及这些概念如何应用于 Objective C 我将不胜感激 编程范式 类
  • 如何显示输入类型=“datetime-local”的值?

    我的代码是这样的 div test div div div
  • 如何确定 QAction 的来源?

    我想知道是否有任何简单 优雅的方法来确定 QAction 的来源 我的意思是我有一个 QAction 它被添加到多个 QWidget 带有QWidget addAction http doc qt nokia com latest qwid
  • 以编程方式清除cloudflare缓存

    在将请求发送到 node js api 后 我尝试以编程方式清除单个 url 的 cloudflare 缓存 我正在使用https github com cloudflare node cloudflare https github com
  • 尝试计算手机解锁的次数

    几个月前我对此感到厌倦 但失败了 我想做的是计算用户解锁手机的次数并将其显示在屏幕上 但每次解锁手机时我都会得到模糊的数字 我的代码如下 我的主要活动 oncreate Override protected void onCreate Bu
  • 将文本插入传入电子邮件 Outlook 2013 锁定只读

    我正在努力通过 VBA 在传入电子邮件中插入字符串 该例程在发送邮件时工作正常 并且如果用户单击 操作编辑 它将对传入邮件起作用 问题是传入邮件被锁定为只读模式 在过去的 13 5 个小时里我到处寻找 在早期版本的 Outlook 中这是可
  • 如何在具有多个峰值的数据集中找到 FWHM?

    我正在使用一个 Python 脚本 它可以在特定的值范围内沿着一维轮廓查找峰值 或在我的例子中为谷值 的索引 我的目标是测量每个感兴趣的山谷的半高宽 这是一维轮廓的示例 https i stack imgur com UTj33 png 这
  • 当应用程序在后台时,android O 中的 onMessageReceived 不会被调用

    我正在从我的服务器发送数据有效负载通知 这是示例 url https fcm googleapis com fcm send to userToken data some json here 通过这种方式 即使应用程序没有运行 我也可以在所
  • 内省和反思有什么区别?

    任何人都可以从语言 环境不可知论的角度解释这两个概念之间的区别吗 编程语言是否需要满足一组条件才能进行反思和 或内省 如果有的话 这些条件是什么 维基百科文章 http en wikipedia org wiki Type introspe
  • 更新错误“模块”对象不可调用后,pip 不再工作

    pip 更新后 pip 已完全停止工作 Z gt pip install matplotlib Traceback most recent call last File c program files python37 lib runpy
  • 在 U-Boot 中使用 I2C 读取多个字节

    我的 Freescale p1022tw 板的 I2C 驱动程序有问题 U Boot 的控制台上有一个从 I2C 设备读取的命令 i2c md chip address 0 1 2 of objects 当我从 id 为 0x60 地址为
  • 为什么使用 Object.create() 和 console.log() 时不显示属性?

    当我使用文字语法创建对象时 将对象打印到控制台会显示该对象foo和p财产 foo foo p 42 console log foo console log foo p Outputs p 42 当我使用 Object create 语法时
  • SWI序言中#=和=:=有什么区别

    What is the difference between and in SWI prolog I have found the definition from SWI prolog but still confused about it