序言。结构(复杂术语)和谓词,我真的不明白区别

2023-11-23

我是序言新手,我似乎无法理解结构和谓词之间的区别。 真的有什么区别吗?

在四处挖掘时,我发现有些人认为f(X):-a(X)是一个谓词,有些人认为嫉妒(X,Y):-爱(X,Z),爱(Y,Z)是一个结构(或一个复杂的术语)。他们对我来说看起来几乎一样。

有人愿意解释一下吗?


在 Prolog 中,term是常数、原子、变量或复合词.

A 复合词由一个functor与 1 个或多个论据。以下是terms:

a.          % a term with functor 'a' and 0 arguments
a(b,c).     % a term with functor 'a' and 2 arguments, b and c

空列表[] is term更具体地说,atom。一个列表[H|T]本质上表示为'.'(H, T)因此,是复合词并且,因此,还有一个term.

你还可以有更复杂的复合词:

a(b(c,d), e(f,g(h)))

Here, a是一个有两个参数的函子:b(c,d), and e(f,g(h)), 等等。

A 复合词也可以称为结构因为它们为您提供了一种构建事实的方法:

customer(name(john,doe), address(street('123 Main St'), city('Framusville'), ...), ...).

A 谓语从句是一个具体的结构 or term。在 Prolog 中,一切都是结构 or term形式:functor(arg1, arg2, ...).

我们看一下谓语从句:

f(X) :- a(X).

它本身就是一个结构其内部表示为term: :-(f(X), (a(X)))。时期 (.) 是终结符。是什么让它成为谓词正如@false 所示,是:

  • 它位于“顶层”(不是更高级别术语中的参数)

  • 它的函子是:-

A 谓语从句也被称为rule自任期以来,:-(A, B)定义了relation: A为真,如果B is true。期限f(X)被称为head谓语从句的。

一个或多个的集合谓语从句它们都有相同的functor and arity(参数数量)的头被称为谓词.

看你的第二个例子:

jealous(X,Y) :- loves(X,Z), loves(Y,Z).

这也是一谓语从句为了谓词 jealous/2 (the 谓词谁的函子是jealous并且数量为 2)。它在内部会表达为这样复合词: :-(jealous(X,Y), ','(loves(X,Z), loves(Y,Z)))。这意味着上面的表达式也是一个复合词.

您可以使用以下命令查看 Prolog 如何查看规范形式的表达式write_canonical/1:

| ?- write_canonical((jealous(X,Y) :- loves(X,Z), loves(Y,Z))).
:-(jealous(_17,_18),','(loves(_17,_22),loves(_18,_22)))

SWI Prolog 网站有一个非常好的Prolog 术语表.

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

序言。结构(复杂术语)和谓词,我真的不明白区别 的相关文章

  • Prolog - 删除非唯一元素

    我有一个谓词来检查元素是否是列表的成员 并且看起来如下 member X X member X T member X T 当我打电话时 member 1 2 3 1 4 我明白了 是的 现在我必须使用它来编写谓词 该谓词将从列表列表中删除所
  • 执行树元解释

    我有根据我之前的问题制作的跟踪元解释器here https stackoverflow com questions 27235148 implementing cut in tracing meta interpreter prolog 我
  • 寻找最大最小值集合

    我正在尝试编写一个 天真的或半天真的 程序 给定一组元素和许多玩家将其划分为这个数量的玩家 并且对于每个这样的划分取最小值 按总和 子集 然后 我想计算所有这些最小除法的最大值 这被称为https en wikipedia org wiki
  • Prolog 中的匹配元组

    为什么Prolog匹配 X Xs 包含更多元素的元组 一个例子 test2 X Xs write X nl test2 Xs test2 X write X nl test
  • 井字游戏的极小极大

    我正在尝试用简单的极小极大算法来解决井字游戏 简单 但应该涵盖很多语言 到目前为止我所拥有的 该板表示为 9 个 未绑定 变量的数组 这些变量可以设置为x or o 获胜条件基本上是 win Player X1 X2 X3 X1 Playe
  • 在 Prolog 中动态拆分列表

    我从序言开始几周 但我看到了更深入的操作列表的递归谓词的构造 我的问题是 是否可以构建一个谓词 将给定列表拆分为给定数量的其他列表 比如我想象的 split H T NumberLists Lists 递归实现 split 1 2 3 4
  • 如何在 Prolog 中计算数字序列的和

    任务是计算从0到M的自然数之和 我使用SWI Prolog编写了以下代码 my sum From To From gt To my sum From To S From 0 Next is 1 S is 1 my sum Next To S
  • 在列表列表中查找形状

    节目说明 该计划的目的 我的程序旨在计算 20X15 大小的平面中形状的位置 我有一个形状列表 其中包含形状类型 其 ID 半径或高度以及其在平面上的预期 X Y 位置 我有一个不同的二元运算列表 仅包含形状类型 其 id 及其与另一个形状
  • 列表中的连续元素

    我正在阻止一个谓词来编码Prolog 我需要对两个谓词进行编码 如果我打电话 u a b c d e f X 它会给X a b X b c X c d 如果我打电话 v a b c d e f X 它会给X a b X c d X e f
  • 控制 Prolog 变量值选择

    灵感来自之前的一个问题 https stackoverflow com questions 41595786 using operator to save variables in a list我尝试实现一些可以枚举布尔表达式可能性的东西
  • Prolog 罗马数字(属性语法)

    我正在做一项作业prolog questions tagged prolog扫描数字列表并应返回该列表是否是有效的罗马数字以及数字的十进制值 前任 1 roman N I N 1 true 2 当我运行我认为应该工作的程序时 十进制值总是正
  • Prolog 中的隔离列表

    我很难理解如何让我的代码显示由偶数和奇数组成的隔离列表 我什至不确定我的理解缺乏什么 显然我对这门语言很陌生 必须在学校使用它 我的命令式和功能性思维不会让我知道这到底是怎么回事 哈哈 现在 不 我不是要求你做我的作业 我只是请你帮我看看我
  • 使用 prolog 添加另外两次出现

    我有一个清单 a b a a a c c 我需要为每个元素添加两次以上的出现 最终结果应该是这样的 a a a b b b a a a a a c c c c 如果列表中有一个与下一个项目相同的项目 那么它会继续下去 直到出现一个新项目 当
  • 一次性删除不正确的后续解决方案

    我有一个谓词 它找到正确的解决方案 但随后又找到不正确的解决方案 data D data threshold nonredundantbumps D 5 Bs write D 3 6 7 8 2 4 5 6 9 4 7 3 D 3 6 7
  • 将行读取到序言中的原子列表

    我需要将任何行 来自 user input 读入原子列表 例如 Example line which contains any ASCII chars into Example line which contains any ASCII c
  • Prolog:从哪里开始解决类似扫雷的难题?

    我需要在序言中写一些类似扫雷的东西 我能够用 正常 语言做到这一点 但是当我尝试用序言开始编码时 我完全不知道如何开始 我需要一些提示 输入规格 板尺寸 m n m n 1 16 三元组列表 i j k 在哪里i 1 m j 1 n k 1
  • Prolog 列表列表获取所有元素

    我有一个列表列表 decide 1 2 3 2 3 6 4 K 我想按 返回所有可能的解决方案 规则是首先返回其列表大小为 1 的值 然后我想返回其大小大于1的值 size 0 size Xs L size Xs N L is N 1 he
  • Prolog 在技术上是如何工作的?引擎盖下是什么?

    我想更多地了解 Prolog 的内部结构并了解它是如何工作的 我知道如何使用它 但不是它内部如何运作 Prolog 中使用的算法和概念的名称是什么 它可能会构建某种树结构或有向对象图 然后在查询时使用复杂的算法遍历该图 也许是深度优先搜索
  • 如何使用append/3在prolog中递归构建列表?

    我需要了解一些事实的价值 这部分似乎正在发挥作用 fact1 A Val1 fact2 B Val2 A B 但是一旦我尝试附加这些值 Val1 Val2 通过使用append 3谓词到列表 OutList 我只得到一个可能的解决方案 而不
  • 将人员分配到床位 - 自动化方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我每年都会帮助举办青年营 将与会者分配到卧室是一项艰巨的任务 有 92 个卧室 活动持续一周 与会者停留的时间长短不一 而且床需要重复

随机推荐

  • 使用堆栈的非递归深度优先搜索 (DFS)

    好吧 这是我在 Stack Overflow 上的第一篇文章 我已经阅读了一段时间并且非常欣赏这个网站 我希望这是可以接受的问题 所以我一直在阅读 算法简介 Cormen MIT Press 并且我已经了解了图形算法 我一直在非常详细地研究
  • 将逗号分隔值转换为双引号逗号分隔字符串

    我有一个逗号分隔的值 例如 alpha beta charlie 我怎样才能将它转换为 alpha beta charlie 在 php 中使用单个函数而不使用str replace Richard Parnaby King 函数的替代方案
  • 如何检查字符串是否以 Java 字符串列表中的任何条目结尾

    我有一个文件名和扩展名列表 我想检查文件名是否以列表中的任何扩展名结尾 String fileName abc txt String extensions txt doc pdf 我可以手动检查扩展名列表 并检查文件是否以列表中的任何扩展名
  • 使用 Sublime Text 2 进行特定于语法的突出显示

    我想知道是否有一种方法可以为同一文件中的不同语言标签提供两种不同的标签颜色 美国的 颜色 例如 假设我在同一个 cfm 文件中具有 ColdFusion 代码和 HTML 代码 我可以将 ColdFusion 标签设为红色 将 HTML 标
  • 在 AVFoundation 中捕获缩放预览视图

    我正在使用 AVFoundation 相机中的缩放功能 我通过缩放具有 AVCaptureVideoPreviewLayer 的视图来实现缩放 现在我想捕捉缩放图像 这是我添加 AVFoundation Video PreviewLayer
  • 当 DataTables 表加载 Ruby on Rails 时显示微调器

    我使用 Rails 构建了一个网络应用程序 Web 应用程序的其中一个页面显示了一个表格 该表格使用数据表API This JSFiddle显示了我的网络应用程序的示例 问题在于 当我开始添加大量数据 当前测试数据为 1500 行 时 表会
  • Google 图表 - 仪表图动画不起作用

    我正在尝试使用 Google Graphs 创建一些 GAUGE 图表 我的目标是从 php 页面加载数据并自动刷新 我能够做到这一点 但是当刷新数据时 仪表线不是动画的 而是从新的重新绘制的 我希望看到这样的酷动画 https jsfid
  • Room 如何转换定制对象

    我是 Room 的新手 我不明白应该如何解决这个问题 我有一个实体Movie另一个实体称为 pcomingMovies Entity public class Movie PrimaryKey NonNull public String i
  • 对于 Internet 上的 WCF 服务来说,传输安全性是一种不好的做法吗?

    我有一个可通过 Internet 访问的 WCF 服务 它具有 wsHttpBinding 绑定和消息安全模式 并使用用户名凭据来验证客户端 msdn说我们应该在Internet场景中使用消息安全 因为它提供端到端的安全 而不是像传输安全那
  • 在 __del__ 中关闭/处理对象真的可以吗?

    我一直在思考如何用Python编写类 更具体地说 构造函数是如何实现的以及对象应该如何被销毁 我不想依赖 CPython 的引用计数来进行对象清理 这基本上告诉我应该使用 with 语句来管理我的对象生命周期 并且我需要一个显式的 clos
  • 如何在 java 8 中展平地图列表

    我有要求 我有地图列表 Men 1 Men 2 Women 3 Women 2 Boys 4 现在我需要将其设为 flatMap 使其看起来像 Gender countOfValues 在上面的例子中 输出将是 Men 3 Women 5
  • 在java中读取Excel工作表时出现NoSuchFieldError

    我遵循了使用 Apache POI XSSF 构建工作簿的简单指南 按照相同的指南 我能够编写 Excel 工作表 但是当尝试读取 Excel 工作表时 我收到代码后显示的错误 Code try FileInputStream file n
  • 反序列化集合时未调用 Setter

    我正在尝试使用 XmlSerializer 进行非常简单的序列化 public struct XmlPerson XmlAttribute public string Id get set XmlAttribute public strin
  • 使用 LINQ to SQL 存储图像:将字节数组或流转换为二进制

    我正在使用 LINQ to SQL 我的图像字段被视为二进制 当我需要渲染图像时 将 Binary 类型转换为 byte 您可以使用 Binary 对象的 ToArray 方法 并不是什么大问题 但是有人可以告诉我如何将 byte 或将对象
  • 为 PerSession WCF 服务调用两次静态构造函数

    无法理解为什么类型构造函数PerSession WCF 服务调用了两次 ConcurrencyMode is Multiple 只需启动五个同时执行相同 WCF 服务方法调用的客户端 在日志中我看到static构造函数被调用两次 第一次 3
  • 使用(自定义)GCC 4.x 或 5.x 时,Boost 构建无法通过 C++11 功能检查

    我需要在 Fedora 24 机器上构建 Boost 1 62 和 1 63 但使用 GCC 4 9 3 或 GCC 5 4 0 取决于 CUDA 版本 这就是我需要旧编译器的原因 但是如果我按照中所述设置自定义 GCC 版本这个答案 an
  • 如何在Tensorflow 2.0中使用gradient_override_map?

    我正在尝试使用gradient override map与张量流2 0 有一个文档中的示例 我也将在这里用作示例 In 2 0 GradientTape可用于计算梯度 如下所示 import tensorflow as tf print t
  • 在 SDK 工具修订版 12 中启动 Android 模拟器

    我将 Android SDK 工具从修订版 11 更新到修订版 12 模拟器现在无法启动 当我尝试运行 emulator exe 时 我得到 无效的命令行参数 Files Android android sdk tools emulator
  • 为什么音频和视频事件不冒泡?

    我想知道为什么我的一些 Javascript 无法工作 直到我发现音频事件没有在 DOM 树中冒泡 例如这timeupdate event 是否有理由不让音频和视频标签的事件冒泡 事件冒泡存在的原因是为了解决哪个元素是事件的预期目标这一含糊
  • 序言。结构(复杂术语)和谓词,我真的不明白区别

    我是序言新手 我似乎无法理解结构和谓词之间的区别 真的有什么区别吗 在四处挖掘时 我发现有些人认为f X a X 是一个谓词 有些人认为嫉妒 X Y 爱 X Z 爱 Y Z 是一个结构 或一个复杂的术语 他们对我来说看起来几乎一样 有人愿意