给定替换 S 和列表 X,如何将 S 应用于 X

2024-01-01

假设我有一个替代品S并列出Xs,其中每个变量出现在Xs也发生在S。我如何找到该列表S(Xs),即通过应用替换获得的列表S到列表Xs.

更具体地说,我有一组谓词和 DCG 规则,看起来像

pat(P)   --> seg(_), P, seg(_).
seg(X,Y,Z) :- append(X,Z,Y).

如果我尝试匹配一个模式P对于列表中的变量,我收到替换S:

?- pat([a,X,b,Y],[d,a,c,b,e,d],[]).
   X = c,
   Y = e

我想应用替换S = {X = c, Y = e}到一个列表Xs有变量X and Y,并收到已进行替换的列表,但我不确定解决问题的最佳方法是什么。

如果我在 Haskell 中解决这个问题,我会构建一个从变量到值的有限映射,然后执行替换。等效的方法是在 DCG 规则中生成变量和值对的列表,然后使用该映射来查找所需的列表。然而,这不是一个合适的方法。


由于替换没有具体化(不是 Prolog 对象),因此您可以将列表绑定到变量并让统一完成其工作:

?- Xs = [a,X,b,Y], pat(Xs,[d,a,c,b,e,d],[]).
Xs = [a, c, b, e],
X = c,
Y = e .

Edit:如果您想在替换后保留原始列表,请使用copy_term:

?- Xs = [a,X,b,Y], copy_term(Xs,Ys), pat(Xs,[d,a,c,b,e,d],[]).
Xs = [a, c, b, e],
X = c,
Y = e,
Ys = [a, _G118, b, _G124] .
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

给定替换 S 和列表 X,如何将 S 应用于 X 的相关文章

  • 在 Visual C# 中的 TextBox/Label 中显示 int 变量 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在创建我的第一个 C 项目 但我找不到在文本框或标签中显示整数变量的方法 我使用的是 Visual C 和 Visual Studio
  • 保存下拉列表中的值

    这是我的情况 我有 2 页 一页用于选择值 一页用于编辑与该值关联的数据库相关内容 现在 我对如何将从下拉列表中选择的值保存到 PHP 的变量中一无所知 并且已经进行了相当多的研究 有任何想法吗 HTML
  • 从函数在 python 3 中创建全局变量

    我想知道为什么在函数结束后我无法访问变量 variable for raw data 代码是这样的 def htmlfrom Website URL import urllib request response urllib request
  • 将 X 插入到排序列表中的正确位置

    在序言中 如何将 X 插入到排序列表中的正确位置 我的尝试 insert X Y Rest X Y Rest X lt Y insert X Rest BiggerRest 您的方向是正确的 但您需要解决这三个问题 insert X X i
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • T-SQL 表名别名

    在我的 T SQL 脚本中 我多次引用相同的长表名称 我在不同的表上使用这个查询 有没有办法通过变量引用表名 如果是这样 我可以简单地在脚本将使用的顶部声明一个变量 只需设置值 我就可以在各种表上运行它 而无需在脚本中进行更改 有几个选择
  • Javascript:如何持续监控变量值

    如何不断检查变量值 例如 if variable value dosomething 如果我不断循环它或其他东西 这会起作用 但是有没有一种有效的方法可以在变量设置为该值后立即触发它 此解决方案使用已弃用的 API 除了在最旧的浏览器上之外
  • Java 会话变量

    我听说有些人认为在会话中将信息存储在服务器上是一个坏主意 因为它不安全 因此 在多页面业务流程功能中 应用程序将数据写入数据库 然后在需要时检索信息 在会话中存储私人信息是否一定不安全 只要会话本身安全 在会话中存储属性就不存在安全风险劫持
  • Perl 中的“@_”有什么作用?

    我浏览了一些我在 Perl 类中编写的代码 我注意到了这一点 my string my stringarray split string 我想知道两件事 变量位于括号中的第一行 这是声明多个变量时所做的事情 如果我删除它们 它仍然可以正常工
  • 找出Pyomo模型不可行的原因

    我得到了一个包含很多变量和约束的 pyomo 具体模型 不知何故 我的模型中的变量之一违反了一个约束 这使得我的模型不可行 WARNING Loading a SolverResults object with a warning stat
  • 为什么函数可以返回由 malloc 设置的数组,但不能返回由“int cat[3] = {0,0,0};”设置的数组

    为什么我可以从函数返回由 malloc 设置的数组 int dog int malloc n sizeof int 但不是数组设置 int cat 3 0 0 0 返回 cat 数组并带有警告 感谢你的帮助 这是一个范围问题 int cat
  • bash后台进程修改全局变量

    在我的 Bash 脚本中 我有一个全局变量foo设置为某个值和函数过程back func这是在后台运行的 我希望后台进程能够访问foo并修改其值 以便主进程可以看到变化 我的脚本的结构如下 bin bash foo 0 function b
  • 如何根据R中的条件创建新变量

    我正在尝试根据某些条件创建一个新变量 我的数据看起来像 a b 1 NA 2 3 3 3 NA 2 NA NA 我想要的是一个变量c这样 when a is not NA b is NA c a when a is NA b is not
  • 如何访问 IRB 中所需的 Ruby 文件中定义的变量?

    文件welcome rb包含 welcome message hi there 但在 IRB 中 我无法访问刚刚创建的变量 require welcome rb puts welcome message gt undefined local
  • 如何在类中使用常量类变量声明常量数组?

    如何在类中使用常量类变量声明常量数组 是否可以 我不想要动态数组 我的意思是这样的 class test const int size int array size public test size 50 int main test t 5
  • WAM 中的扁平化形式

    WAM 教程重构指出查询 p Z h Z W f W 需要使用以下原则进行扁平化 话虽这么说 查询扁平化形式是 X3 h X2 X5 X4 f X5 X1 p X2 X3 X4 我对外部变量的定义感到困惑 请考虑以下内容 p Z h Y a
  • 如何使用append/3在prolog中递归构建列表?

    我需要了解一些事实的价值 这部分似乎正在发挥作用 fact1 A Val1 fact2 B Val2 A B 但是一旦我尝试附加这些值 Val1 Val2 通过使用append 3谓词到列表 OutList 我只得到一个可能的解决方案 而不
  • 基于整数创建多个变量

    我想根据我定义的数字创建多个变量 目前 我有一个客户端和一个服务器正在运行 每次客户端加入时 我希望服务器创建一个变量 每个用户都分配有一个号码 list of addr user num 0 recv verf addr server s
  • C-为什么char c=129会转换成-127?

    如果我们分配 128到 char 变量 然后将其转换为 128因为二进制等价 10000000 first bit tells sign 二进制等价于129 is 10000001 它将转换成什么值 字符c 129 谢谢 S 实际上有几种可
  • Prolog 谓词参数中实例化模式指示符的含义

    查看Prolog文档 谓词签名有时会写成如下 foo Bar Baz Qux Mop 什么是 and 我该如何解释它们 另外 这些是唯一存在的还是还有更多 在这种情况下 这些前缀运算符代表实例化模式 即它们告诉您哪些参数应该是变量或在调用谓

随机推荐

  • 即使使用 -Ofast,Swift 的字典也很慢

    我正在使用本质上实现缓存Dictionary在斯威夫特 表现远远低于我的预期 我读过其他一些问题 例如这是关于数组排序的 https stackoverflow com questions 24101718 swift performanc
  • Backbonejs 与小胡子模板。

    我想使用带有小胡子模板的backbonejs 来做一个简单的应用程序 你能给我一个示例程序吗 新节点文件 var Person Backbone Model extend defaults name Guest Worker var Per
  • 为什么 Applicative 应该是 Monad 的超类?

    Given Applicative m Monad m gt mf m a gt b ma m a 这似乎被认为是一项法律 mf lt gt ma do f lt mf a lt ma return f a 或者更简洁地说 lt gt ap
  • 获取鼠标相对于饼图的位置(方程)

    我已经从一组数据创建了一个画布饼图 我现在尝试定位相对于饼图的鼠标位置 以检测正在悬停的数据部分 我快到了 但我被一个方程式困住了 我的逻辑运行良好 所以我认为这更像是一个数学问题 但会看看其他人对我的方法的看法 这是我的饼图和我正在使用的
  • Maven `pom.xml` 中 标签之间的区别[重复]

    这个问题在这里已经有答案了 配置我的时pom xml 我必须配置一个插件 我发现的是
  • 为什么这个特征中需要“Sized”界限?

    我有一个具有两个相关功能的特征 trait WithConstructor Sized fn new with param param usize gt Self fn new gt Self Self new with param 0 为
  • laravel重置密码不重置密码

    我正在使用 laravel 6 我第一次尝试为我的 laravel 项目实现忘记密码 我自定义了登录 忘记密码 重置密码页面的默认设计 我已经集成了mailtrap用于发送电子邮件 我已经成功地实现了这样的流程 单击忘记密码链接 获取用户输
  • 无论操作系统如何,在 Java 中执行计划任务的最佳解决方案是什么?

    我想在我的 Java 桌面应用程序上生成警报 设置特定日期 时间的警报 可以是 5 分钟或 5 个月内 我需要能够在触发警报时创建 SWT 应用程序 我需要它能够在任何操作系统上工作 软件用户可能使用 Windows 其中 90 其余使用
  • CVXPY 在二次规划优化问题上返回不可行/不准确

    我正在尝试使用 CVXPY 来解决非负最小二乘问题 附加约束是解向量中的条目之和必须等于 1 然而 当我使用 SCS 求解器在这个简单的二次程序上运行 CVXPY 时 我让求解器运行最多 100000 次迭代 最后遇到错误 指出二次程序不可
  • 为什么运行 Rspec 时会出现未定义方法“有”错误?

    我最近升级到 Rails 4 除了 Rspec 测试之外 一切正常 require spec helper describe Invoice do before each do user FactoryGirl create activat
  • Laravel 查询生成器 - sum() 方法问题

    我是 Laravel 的新手 查询生成器有一些问题 我想构建的查询是这样的 SELECT SUM transactions amount FROM transactions JOIN categories ON transactions c
  • 如何在 remix run 中从实用程序函数重定向

    我正在使用 Remix run 我想从 auth 实用程序函数重定向到我的登录页面 但它不起作用 这是与我的身份验证实用程序方法类似的功能 import redirect from remix async function authenti
  • 在 for 循环中使用“else”的 Pythonic 方法[重复]

    这个问题在这里已经有答案了 我几乎没有注意到Python程序在for循环中使用了else 我最近使用它在退出时根据循环变量条件执行操作 因为它在范围内 在 for 循环中使用 else 的 Python 方式是什么 有什么值得注意的用例吗
  • Jquery找到所有以字符串开头的id?

    只是想知道如何在整个页面中搜索以 content 开头的所有 id 以及如何仅在名为 extra content 的命名 div 中找到它们 一旦我有了所有的ID 我想隐藏它们 下面是我想找到的示例 div div lt Find div
  • 使用 Maven 的 JavaScript 缩小工作流程

    我想知道是否有任何 最佳实践 可以将 现代 JavaScript 构建工作流程 集成到生成 WAR 工件的 Maven 构建中 我发现了几个处理串联和缩小的 Maven 插件 WRO4J https code google com p wr
  • 如何开始 VOIP 编程? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何开始开发 VoIP 产品 想听听
  • 抛出异常时不调用析构函数

    考虑以下代码 include
  • MongoDB 和 C#:不区分大小写的搜索

    我在用MongoDB http www mongodb org 和MongoDB 的 C 驱动程序 http www mongodb org display DOCS CSharp Language Center CSharpLanguag
  • Android GUI架构-Surface/view/window/canvas之间的关系

    更新 经过几天的谷歌搜索和实验 https github com pierrchen understandAndroidUI 我已经找到了大部分愚蠢问题的答案 查看我提交的答案 Android Window 的职责是什么 这里有一些问题 它
  • 给定替换 S 和列表 X,如何将 S 应用于 X

    假设我有一个替代品S并列出Xs 其中每个变量出现在Xs也发生在S 我如何找到该列表S Xs 即通过应用替换获得的列表S到列表Xs 更具体地说 我有一组谓词和 DCG 规则 看起来像 pat P gt seg P seg seg X Y Z