Prolog:带有内置命令的“Vanilla”元解释器

2023-11-23

这个答案Jan Burse 展示了 Prolog 中元解释器最简单的实现之一:

solve(true) :- !.
solve((A,B)) :- !, solve(A), solve(B).
solve(H) :- clause(H,B), solve(B).

我想扩展这个解释器,以便它可以调用内置函数。普通版本无法处理诸如solve(member(X, [1,2,3,4]))。使用 ISO 谓词可以实现这一点吗?如果没有,是否可以使用 SWI-Prolog 谓词?


I think predicate_property/2可能对您的任务有用。

顾名思义,这个谓词将一个谓词(中心词)与一个或多个特性.

例如:



?- predicate_property((A,B), P).
P = interpreted ;
P = visible ;
P = built_in ;
P = static ;
P = imported_from(system) ;
etc.
  

从这些属性中,您可以推断出谓词是否是built-in,然后直接调用它。

它也可用于SICStus.

但请注意:并非所有内置谓词在直接调用时都保留其语义。我认为讨论它们是什么以及如何解释它们本身就很值得。

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

Prolog:带有内置命令的“Vanilla”元解释器 的相关文章

  • 在 Prolog 中解答爱因斯坦之谜

    我正在尝试解决爱因斯坦之谜 https www wikiwand com en Zebra Puzzle在序言中 我在编写程序时遇到了困难 基本方法是添加所有约束并让 Prolog 找出唯一可能的解决方案 问题是 Prolog 找到了 0
  • prolog中输入/输出参数的区别

    Prolog谓词定义中的输入和输出参数有什么区别吗 这与其他语言 例如Scheme 和C 相比如何 我希望我理解你的问题 您应该研究一下 Prolog 中如何实现统一 因为它会让事情变得更清晰 反正 简而言之 没有内置方法可以将 Prolo
  • 如何在SWI-Prolog中启用所有统一中的发生检查?

    根据维基百科 https en wikipedia org wiki Occurs check 为所有统一提供声音统一的实现是 Qu Prolog 和 Strawberry Prolog 以及 可选地 通过运行时标志 XSB SWI Pro
  • 如何确定矩阵的所有给定坐标都是相连的?

    给定一个网格 我如何确定网格的元素是否都在单个区域中 在下面的情况下是正确的 因为矩阵中的每个元素都有一个邻居 示例1 gridneighbours 1 1 1 2 1 3 2 1 2 2 2 3 3 1 4 1 4 2 true 然而在我
  • Prolog 中的失败谓词有什么用?

    我想不出我需要它的情况 优雅的系统提供false 0作为命令式的声明式同义词fail 0 它有用的一个例子是当您想要手动强制回溯副作用时 例如 between 1 3 N format line w n N false line 1 lin
  • 如何提高词法分析效率?

    在解析一个 3 GB 的大文件时DCG https www metalevel at prolog dcg 效率很重要 我的词法分析器的当前版本主要使用 or 谓词 2 http www swi prolog org pldoc doc f
  • 如何声明两个列表具有相同的长度?

    我需要知道如何比较 Prolog 中两个列表的长度 这是我到目前为止所拥有的 sum N1 N2 checklength N1 N2 checklength N1 N2 L1 is length N1 What L2 is length N
  • 二叉树的 Herbrand 宇宙、Herbrand 基础和 Herbrand 模型(序言)

    什么是二叉树的 Herbrand 宇宙 Herbrand Base 和 Herbrand Model binary tree empty binary tree tree Left Element Right binary tree Lef
  • Prolog 追加与剪切运算符

    当我们使用append和cut操作符时会出现什么问题 append2 L L append2 H T L H TL append2 T L TL 我尝试了几种不同的输入 但总是成功 append2 1 2 5 L L 1 2 5 appen
  • 关于构建列表直至满足条件

    我想解决 巨猫军团之谜 https youtu be YeMVoJKn1Tg由 Dan Finkel 使用 Prolog 编写 基本上你从 0 然后使用以下三个操作之一构建此列表 添加5 添加7 或采取sqrt 当您成功建立一个列表后 您就
  • 如何在 Prolog 中求反

    我是 PROLOG 新手 正处于练习的开始阶段这一页 https sites google com site prologsite prolog course a first glimpse 给定规则parent X Y 和male X 我
  • 如何在 swi-prolog 的 prolog 文件中运行 prolog 查询?

    如果我有一个定义规则的 prolog 文件 并在 Windows 中的 prolog 终端中打开它 它会加载事实 然而 然后它显示 提示我手动输入一些内容 如何将代码添加到文件中 以便它实际上会评估这些特定的语句 就像我输入它们一样 像这样
  • 如何在 Prolog 中为变量(如字符串)分配多个值?

    今天早些时候 我寻求帮助以在序言中构建数据库以及如何通过参数搜索 有人提出了这个 您还可以向每个处理器添加术语列表 例如 processor pentium g4400 brand intel family pentium series g
  • 寻找最大最小值集合

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

    我想在序言中实现以下问题 Given L1 1 2 3 4 and L2 2 3 4 调用名为remove list L1 L2 L 的函数将从L1中删除L2 所以L将是 1 但是 如果第二个列表的元素与 L1 中的元素顺序不同 或者更准确
  • Prolog 管线任务

    我有一项任务是在序言中制作一张简化的地铁地图 其中一部分要求制定一项规则来检查两个车站是否在同一条线上 我有一条规则 但它似乎不起作用 这就是我到目前为止所拥有的 adjacent nh lg central 4 adjacent lg o
  • 导入 csv 文件数据以填充 Prolog 知识库

    我有一个 csv 文件example csv其中包含两列 标题为 var1 和 var2 我想填充一个最初为空的 Prolog 知识库文件import pl具有重复的事实 而每一行example csv处理方式相同 fact A1 A2 f
  • Prolog:子句在源文件中不在一起

    我有这段代码 Family tree female pen male tom male bob female liz female pat female ann male jim parent pam bob parent tom bob
  • 根据一个值找到列表内列表的最小值

    我在序言中有这个列表 dublin london 1000 dublin moscow london 5000 我想计算列表的最小值 这样答案应该是 dublin london 1000 这个问题有一些类似的问题序言中列表列表中的最小值 h
  • 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

随机推荐

  • 制作多语言网站的最佳方式

    我用 ASP NET C 及其内容English 现在我需要以支持多种语言的方式制作这个网站 即 德语 法语 标签 文本框 字符串所有值将显示各自选定的语言 在搜索时我发现有一些方法 比如 使用本地化 使用资源文件 数据库 不同语言的所有内
  • p:fileUpload 中的侦听器方法永远不会在 primefaces 中调用 [重复]

    这个问题在这里已经有答案了 我正在尝试上传带有 primefaces 的图像 但未调用 fileUploadListener
  • 服务中的重定向 - symfony2

    我可以重定向到服务中的另一个控制器吗 我已经根据提供的示例实现了一项服务 阿塔米尔 我的由控制器执行的函数代码如下所示 public function verifyanddispatch session this gt request gt
  • 使用ajax和jquery替换div内容

    我尝试使用以下代码来替换 div 内容 但它不起作用 我做错了什么 function MakeRequest page num li click function var id this id alert id ajax url displ
  • 如何从 div 外部的链接使用 jQuery UI 选项卡打开选项卡?

    这可能有点难以解释 但我会尽力 我有一个产品页面 有两个选项卡 完整说明和视频 这些是使用 jQuery UI 选项卡完成的 在页面的这一部分上方 我有一个带有缩略图的产品图像 但我希望其中一个缩略图成为查看视频的链接 当然 该链接包含在视
  • 删除 MATLAB 中的空单元格

    我想删除 matlab 元胞数组底部的所有空元胞 然而 我发现的所有代码示例都将矩阵折叠为向量 这不是我想要的 所以这段代码 a 1 2 3 4 emptyCells cellfun isempty a a emptyCells 结果在这个
  • Swift:如何检测 UISplitViewController 当前是否显示 1 个或 2 个控制器?

    我如何检测是否UISplitViewController目前刚刚展示1 个视图控制器或者它在双窗格中2 个视图控制器并排显示 分割视图控制器反映了实际的显示模式显示模式财产 全部可见 主 UIViewController 和辅助 UIVie
  • 我需要显式分配我的 NSNumber 吗?

    我定义一个数字 如下 NSNumber nn0 NSNumber numberWithInt 0 无需任何分配即可正常工作 我的理解是 如果我使用 numberWithInt 则会自动调用 alloc 和 init 如果我尝试在函数结束时释
  • 基于自定义 HTTP 标头的 UrlRewrite 条件

    我正在尝试在 UrlRewrite 中配置一个有 2 个条件的规则 HTTP 标头HTTP HOST需要匹配某个域 api contoso com 自定义 HTTP 标头x app version需要出现在 HTTP 请求中 根据此信息 我
  • 如何将鼠标滚轮输入定向到光标下方进行控制而不是聚焦?

    我使用了许多滚动控件 TTreeViews TListViews DevExpress cxGrids 和 cxTreeLists 等 当鼠标滚轮旋转时 无论鼠标光标位于哪个控件上 具有焦点的控件都会接收输入 如何将鼠标滚轮输入定向到鼠标光
  • 如何使用 SWIG 从 C++ 调用 Java?

    我可以使用 SWIG 从 Java 调用 C 代码 但我找不到任何有关如何执行相反操作 从 C 调用 Java 的文档 官方 SWIG 文档说 http www swig org Doc1 3 Java html java overview
  • Laravel eloquent 模型模型属性转换(我应该转换哪些属性类型?)

    我不确定我是否完全理解 Laravel Eloquent 属性转换 根据文件 https laravel com docs 8 x eloquent mutators attribute casting 这些是支持的类型 整数 实数 浮点
  • MATLAB 支持前向声明吗?

    是否可以在 m 文件中使用函数 该函数在同一文件的后面部分中实现 以与其他编程语言 例如 C 类似的风格 当然 在这样的 m 文件中 局部函数将在主函数之后声明 例如 function y main func x This is the m
  • 加速熊猫 cummin/cummax

    Pandas cummin and cummax对于我的许多组的用例来说 函数似乎真的很慢 我怎样才能加快他们的速度 Update import pandas as pd import numpy as np from collection
  • 折线图中的条件背景颜色

    我目前正在尝试将我们的图表从 PQ Systems Chartrunner 转换为 SSRS 2008 图表 我目前正在 SSRS 2008 中使用折线图 并尝试让背景颜色针对不同的西格玛进行更改 我能够计算并绘制标准差西格玛线 但我无法更
  • 如何检索 COM 类的接口 ID,以便将其传递给 CoCreateInstance?

    我想以编程方式检索任何类的接口 ID 以便可以将其传递给 CoCreateInstance 很感谢任何形式的帮助 请参阅下面的 如何获取此内容 HRESULT hResult CLSID ClassID void pInterface if
  • 转储到 JSON 添加了额外的双引号和引号转义

    我正在使用 Python 工具检索 Twitter 数据 并将这些数据以 JSON 格式转储到我的磁盘上 我注意到用双引号括起来的推文的整个数据字符串被意外转义 此外 实际 JSON 格式的所有双引号都用反斜杠转义 它们看起来像这样 cre
  • 如何跟踪WPF中TextBox中的哪个字符被删除?

    我想跟踪用户通过Delete或BackSpace键删除了哪个字符 我正在处理文本框的 TextBox ChangedEvent 我可以从中提取删除的字符吗文本更改事件参数 e 变更如果是的话我该怎么做 我想限制用户从文本框中删除任何字符 我
  • 如何更改 xcode 中的 subversion 设置?

    我已经在 Xcode 中运行了 subversion 一段时间 subversion 的集成始终悬而未决 然而我的 subversion 服务器已经改变了它的 ip 地址 并且我的 xcode 项目仍然尝试在旧 ip 上查找源 我已经通过
  • Prolog:带有内置命令的“Vanilla”元解释器

    这个答案Jan Burse 展示了 Prolog 中元解释器最简单的实现之一 solve true solve A B solve A solve B solve H clause H B solve B 我想扩展这个解释器 以便它可以调用