SWI Prolog 中的变量名称

2023-11-21

我一直在使用 chr 库和 jpl 界面。不过我有一个一般性的询问。我将 SWI Prolog 中的约束发送到 CHR 程序中的 java 类的实例。问题是,例如,如果输入约束是 leq(A,B),则变量名称消失,出现的变量名称以 _G 开头。即使我尝试在根本不使用接口的情况下打印 leq(A,B) ,也会发生这种情况。看来每当处理变量时,名称就会被替换为新的名称。我的问题是是否有办法进行映射。比如是否有办法知道_G123对应的是A等等。 非常感谢。


(这个问题与 CHR 无关,也不是 SWI 特有的)。

编写 Prolog 程序时使用的变量名称将被 Prolog 系统完全丢弃。原因是该信息无法用于准确打印变量。该变量可能有多个独立实例。因此,需要在变量名称中添加一些唯一标识符。此外,在运行时维护该信息会产生大量开销。

要看到这一点,请考虑一个谓词mylist/1.

?- [user].
|: mylist([]).
|: mylist([_E|Es]) :- mylist(Es).
|: % user://2 compiled 0.00 sec, 4 clauses
true.

在这里,我们使用了变量_E对于列表中的每个元素。顶层现在用唯一标识符打印所有这些元素:

?- mylist(Fs).
Fs = [] ;
Fs = [_G295] ;
Fs = [_G295, _G298] .
Fs = [_G295, _G298, _G301] .

第二个答案可能会打印为Fs = [_E]反而。但第三个呢?它不能打印为Fs = [_E,_E]因为元素是不同的变量。所以像Fs = [_E_295,_E_298]是我们能得到的最好的。然而,这将意味着大量额外的簿记工作。

但还有另一个原因,为什么将源代码变量名称与运行时变量相关联会导致极其复杂:在不同的地方,该变量可能有不同的名称。这是一个人为的例子来说明这一点:

p1([_A,_B]).

p2([_B,_A]).

和查询:

?- p1(L), p2(L).
L = [_G337, _G340].

您希望这两个元素起什么名字?第一个元素可能有名称_A or _B或者甚至更好:_A_or_B。甚至_Ap1_and_Bp2。这对谁来说有好处?

请注意,顶层查询中提到的变量名称将被保留:

?- Fs = [_,F|_], mylist(Fs).
Fs = [_G231, F] ;
Fs = [_G231, F, _G375] ;
Fs = [_G231, F, _G375, _G378] 

所以有一种方法可以获取该信息。关于阅读术语时如何获取SWI和YAP中的变量名称,请参考这个问题.

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

SWI Prolog 中的变量名称 的相关文章

  • Java“非法访问操作”方法将被弃用? [复制]

    这个问题在这里已经有答案了 JDK 9 JVM 发出非法访问操作警告后 如果您使用一些非法访问 例如setAccessible 我的问题 Is setAccessible 以后会被封吗 此功能的官方参考 如果将被弃用 在哪里 我在任何地方都
  • 使用 system.reflection 列出类字段

    我需要获取一个列表来存储类中的所有字段 值 这个班级只是一些公共的const string我在下面粘贴的变量 public class HTDB Cols public class TblCustomers public const str
  • 将 X 插入到排序列表中的正确位置

    在序言中 如何将 X 插入到排序列表中的正确位置 我的尝试 insert X Y Rest X Y Rest X lt Y insert X Rest BiggerRest 您的方向是正确的 但您需要解决这三个问题 insert X X i
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 递归读取任何 java 对象并将复杂类型提取到哈希映射中

    我需要编写一个实用程序 它接受空白 HashMap 和任何对象作为参数并返回 HashMap public HashMap returnMap HashMap map Object parseThisObject logic to stri
  • 使对象在运行时不可变 [C#]

    有什么方法 我希望利用反射 可以使实例化对象不可变及其所有公共财产 我有一个来自其他人的代码库 没有可用源 的类 我需要使用它 并且我基本上希望在实例化该类后 如果任何地方的任何代码段尝试调用该类中的公共设置器 则抛出异常 注意 我不想在类
  • 当我通过反射创建对象时,如何重写 Java 中的方法?

    In Java 是否可以覆盖您使用创建的类中的方法reflection 例如 假设我有以下课程 public class MyObject public String foo bar public MyObject String foo t
  • 关于 serviceloader 的 Java 9 依赖问题

    我有一个关于Java 9中的serviceloader如何根据这种情况进行更改的问题 Scenario Project gert Class Main package gert import java io ByteArrayInputSt
  • 如何为这个“移动块”Prolog 练习实现求解谓词?

    我正在使用 Ivan Bratko 的书 人工智能编程 学习 Prolog 我发现实施拟议练习的最后部分有些困难 该练习是一个使用图形来决定如何移动块并按顺序排列它们的程序 这是与程序必须执行的操作相关的图像 正如您在上图中看到的 可以使用
  • 获取同名方法的集合

    我有一些代码 用于帮助 url 路由 尝试在控制器中查找操作方法 我的控制器看起来像这样 public ActionResult Item int id MyViewModel model new MyViewModel id return
  • 运行时使用JDK编译器时发生内存泄漏

    我正在尝试向我的程序添加一个javaeditor以在运行时扩展程序 一切都工作正常 除非广泛使用该程序 我模拟了 1000 10000 次编译器执行 内存使用量不断上升 看起来有内存泄漏 在我的程序中 类被加载 构造函数被执行 类被卸载 没
  • 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
  • 序言中的“如果”?

    有没有办法在序言中执行 if 操作 例如如果变量为 0 则执行一些操作 将文本写入终端 甚至不需要 else 但我找不到 if 的任何文档 是的 ISO Prolog 中有这样一个控制结构 称为 gt 你像这样使用它 condition g
  • 使用反射来检查部分方法是否已实现

    背景 我正在使用 Linq to SQL 因此生成了一个包含自动生成的类的 DBML 文件 部分生成过程为某些操作创建部分方法 在我的例子中 我感兴趣的两个方法与表记录的插入和更新相关 这些部分方法是根据 DBML 设计器中创建的每个表生成
  • 如何从继承的方法中获取派生类的路径?

    如何从继承的方法中获取当前类的路径 我有以下内容 and
  • 如何动态计算 C# 表达式?

    我想做相当于 object result Eval 1 3 string now Eval System DateTime Now ToString as string 关注比里斯link http www codeproject com
  • GetReferencedAssemblies 不返回所有程序集

    我在表单中有以下代码 并试图找到一种方法来加载由名为的表单引用的项目程序集DataObjects 使用以下代码 我只列出了六个程序集 查看表单所在项目的引用 有十三个程序集引用 这里有什么问题吗 private void ListRefer
  • 如何通过反射判断泛型数组元素的类型?

    我想做的是没有泛型类型很简单 SomeType s new SomeType 5 for int i 0 i lt 5 i s i new SomeType 使用泛型 这就是我到目前为止所拥有的 private static T TypeM
  • Scala Array.apply 有何魔力

    来自 scala 2 10 4 的 array scala Array定义为 final class Array T length Int extends java io Serializable with java lang Clonea
  • 获取类 DisplayName 属性值

    我花了最后一个小时试图获得 a 的价值DisplayName应用于 a 的属性Class 我发现从方法和属性中获取属性值很简单 但我在该类上遇到了困难 有人可以帮我解决这个相对较小的问题吗 示例如下 班上 DisplayName Oppor

随机推荐

  • jquery:如何选择没有被 html 标签包围的文本?

    Beer br Vodka br rum br whiskey 如何选择啤酒 还是朗姆酒 在 jquery 中 它们没有被任何 html 标签包围 如果您的意思是要直接选择文本节点 建议不要使用 jQuery 需要澄清的是 获取一组包装的文
  • 我应该将 ASP.NET MVC 控制器操作设为虚拟吗?

    文件 gt ASP NET MVC 项目的新项目 用于生成具有虚拟操作的控制器 我不确定 MVC 2 或 MVC 3 是否会停止这种情况 但这不再是最佳实践吗 T4MVC确实使动作方法变得虚拟 如果您正在使用它 它应该使操作方法变得虚拟 没
  • Python selenium - 修改网页的源代码

    我正在使用 Python selenium 来自动输入我的出勤信息 一切正常 现在我想通过修改源代码来尝试 我看到很少有帖子指出可以使用它进行修改driver execute script 它适用于 JavaScript 但就我而言 我需要
  • 在没有安装 rgdal 的情况下解压并读取 R 中的形状文件

    我想在 R 中解压并读取来自网络的形状文件 而不依赖于 rgdal 我找到了read shp的功能fastshp软件包显然可以在环境中安装 rgdal 的情况下完成此操作 但是 我在实施时遇到了麻烦 我想要一个可以解压缩然后读取形状文件的函
  • 使用 Firebug 检查弹出/下拉菜单样式的技巧是什么?

    有没有办法在使用 Firebug 检查时使弹出菜单 粘住 你可以用 Chrome 来做 但我更喜欢 firebug 当您看不到正在设置样式的元素时 很难设置填充或边距 我做了一些研究但无法弄清楚 有一个内置选项 检查 隐藏 的元素 然后使用
  • 使用构建器模式时“借用的价值不够长”

    我有以下代码 pub struct Canvas lt a gt width isize height isize color Color surface Surface texture Texture renderer a Rendere
  • 更改方法内的引用类型(字符串)

    我将一个字符串变量传递给一个方法 我知道字符串是引用类型 但我在方法内分配的值丢失了 public static void TestMethod string myString myString world static void Main
  • 删除 Swift 3 中的最后一个字符

    我正在创建一个简单的计算器应用程序 目前正在努力在点击按钮时删除最后一个字符 我正在使用dropLast 方法 但我不断收到错误 调用中参数 1 缺少参数 IBAction func onDelPressed button UIButton
  • 正则表达式进入无限循环

    我正在解析以下形式的 物种 名称 Parus Ater H sapiens T rex Tyr rex 通常有两项 二项式 但有时有 3 项或更多项 Troglodytes troglodytes troglodytes E rubecul
  • 来自一系列图像的python 16位灰度视频

    我有一个 uint16 类型的灰度图像数据集 我想将其保存为视频文件 输出应该是 uint16 类型的无损视频文件 我尝试了这个代码 video cv2 VideoWriter file name 0 fps w h isColor Fal
  • “错误时转到 0”和“错误时转到 -1”之间的区别 -- VBA

    谁能找到 VBA 中 On error goto 1 和 on error goto 0 之间的区别吗 我尝试过 google 和 msdn 但没有成功 On Error GoTo 0禁用过程中当前存在的任何错误捕获 On Error Go
  • ASP.NET MVC - Model.OrderBy Date 没有效果

    我在按日期对结果进行排序时遇到一些困难 有什么特别的方法吗 因为我现在正在这样做 var db new DB var articles db Articles var orderedArticles articles OrderBy a g
  • jsp:include 中的 response.sendRedirect() 被忽略?

    我有一个 jsp 文件 其中包含另一个 jsp 文件来检查一些值 例如
  • DataGrid 行的条件文本颜色?

    我有一个绑定到数据库表的数据网格 我需要将行的前景色更改为蓝色 具体取决于其一列中的值 我有办法做到这一点吗 我尝试了 IValueConverter 但我想我一次只能将其用于一个单元格
  • 连接到远程 Spark master - Java / Scala

    我创建了一个 3 节点 1 个主节点 2 个工作节点 Apache SparkAWS 中的集群 我可以从主服务器向集群提交作业 但是我无法让它远程工作 SimpleApp scala import org apache spark Spar
  • 如何在node.js中关闭firebase连接

    下面是我如何使用 firebase 的一个简单示例 let firebase require firebase firebase initializeApp serviceAccount config firebase json datab
  • 使用一次性循环将平面数组转换为树

    SO 问题 假设我们有具有以下结构的平面数组 array level gt 1 name gt Root 1 level gt 1 name gt Root 2 level gt 2 name gt subroot 2 1 level gt
  • 另一个 Ant + JUnit 类路径问题

    我正在使用 Eclipse 开发 Eclipse SWT 应用程序 还有一些 JUnit 4 测试 用于测试一些 DAO 但是当我尝试通过 ant 构建运行测试时 所有测试都会失败 因为找不到测试类 谷歌培养了大约一百万人 他们都有同样的问
  • Angular UI Modal 2 方式绑定不起作用

    我添加了一个 Angular UI 模态 将范围传递到模态窗口以进行 2 路绑定 我用的是resolve方法来传递范围值 这样做的作用有点作用 这意味着当父级中的 ng model 值发生变化时 它会反映在模式窗口内 但是 如果值在模态窗口
  • SWI Prolog 中的变量名称

    我一直在使用 chr 库和 jpl 界面 不过我有一个一般性的询问 我将 SWI Prolog 中的约束发送到 CHR 程序中的 java 类的实例 问题是 例如 如果输入约束是 leq A B 则变量名称消失 出现的变量名称以 G 开头