Prolog查找所有路径实现

2024-02-02

我的任务是在 Prolog 中实现 findall 的一个版本,除了 not 和 cut 之外,不使用任何 Prolog 内置函数 - 所以基本上是在纯 Prolog 中。

我正在尝试在树中搜索所有直系后代并在列表中返回结果

parent(a, b).
parent(b, c).
parent(b, d).
parent(e, d).

到目前为止我所拥有的是:

find(X, L) :- find2(X, [], L).
find2(X, Acc, L) :- parent(Y, X), find2(Y, [Y|Acc], L).
find2(_, Acc, Acc).

例如,当我输入时我想要得到什么:

find(a,X).

将会:

X = [b, c, d]

(顺序不重要)

然而我得到的是:

X = [b, c] ;
X = [b, d] ;
X = [b] ;
X = [].

我是 Prolog 新手,因此我们将不胜感激。

Thanks


除了随时断言数据之外,您还可以使用额外的逻辑谓词,例如nb_setarg/3 http://www.swi-prolog.org/pldoc/doc_for?object=nb_setarg/3。然后,一旦找到父级,您就可以通过 nb_setarg 进行故障恢复并找到另一个父级。之前找到的所有解决方案都应保留在您执行 nb_setarg 的项中,然后在用尽所有结果后,nb_setarg 项就是答案。 SWI-Prolog 示例很好,但它只是一个计数器。尝试使用随您构建的列表(或者更好的是:差异列表)来完成此操作。

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

Prolog查找所有路径实现 的相关文章

  • Python递归限制与堆栈大小?

    我了解递归中每个递归调用如何堆栈在堆栈上 如果超出堆栈限制 则会出现堆栈溢出 那么为什么Python的sys getrecursionlimit 返回一个数字 递归调用的最大深度 这不取决于我在该递归函数中所做的事情吗 或者它是否以某种方式
  • 为什么单线程异常会导致整个程序崩溃(如何防止这种情况?)

    例如 如果我跑步 int x 0x00000 程序崩溃了 但为什么整个程序崩溃而不是单个线程崩溃呢 我创建了多个连续睡眠的线程来测试这一点 有什么方法可以让当前线程退出 而不是整个程序 在Windows上使用winapi Thanks 但为
  • 在使用 stop_token 等待条件变量_any 时是否需要拥有锁来请求停止?

    在等待条件变量时 更改谓词状态的线程必须拥有锁 因此在唤醒期间不会错过更新 根据文档 这是必要的 即使在使用原子变量时也是如此 不过我不确定是否request stop 已经正确处理了 那么问题是 这两个选项中哪一个是正确且符合标准的呢 j
  • 迭代两个不同长度的列表

    我有以下两个列表 nums 1 2 3 4 5 6 7 8 ltrs a b c d for x y in nums ltrs print x y 出现以下错误 c Python35 Scripts gt python listtest p
  • C++ 类内线程并发

    我试图在一个类中运行两个并发线程 它们都使用相同的函数打印数据 使用 std lock guard 进行作用域锁 问题是只有第一个线程被触发 第二个线程永远不会被调用 include
  • 当我们调用 Thread.start() 时真正发生了什么[重复]

    这个问题在这里已经有答案了 正如问题标题所说 我想知道当我们调用 Thread start 时内部发生了什么 以及 start 方法何时返回以及 main 恢复执行 内部会触发什么内容 例如向调度程序注册线程等 另外为什么要使用执行者 你打
  • 发布/订阅架构

    我尝试编写一个发布 订阅系统 客户端和服务器端 其中客户端接收定期更新 如心跳 消息控制 并可以向服务器发出命令 订阅某些源 这样做的好方法是什么 我已经有一个实现线程池的服务器来管理传入的客户端连接 我想知道如何处理连接双方都可以在 Ne
  • 如何在不进行尾调用优化的情况下用函数式编程替代方案替换 while 循环?

    我正在 JavaScript 中尝试一种更实用的风格 因此 我用诸如map和reduce之类的实用函数替换了for循环 然而 我还没有找到 while 循环的功能替代品 因为尾部调用优化通常不适用于 JavaScript 据我了解 ES6
  • 如何定义 map::iterator 列表和 list::iterator 映射

    我需要 Map iterator 的列表和 List iterator 的映射 我怎样才能做到这一点 typedef std list
  • 为什么将 volatile 与同步块一起使用?

    我在java中看到了一些示例 其中他们在代码块上进行同步以更改某些变量 而该变量最初被声明为易失性 我在单例类的示例中看到 他们将唯一实例声明为易失性 并且同步了该块初始化该实例 我的问题是为什么我们在同步它时声明它是易失性的 为什么我们需
  • Qt中用于线程间通信的类设计

    问题陈述 用相机跟踪物体并相应地移动相机的方位角和仰角 Process 相机获取物体的图像 处理相机的每一帧以查找物体 应该被跟踪 并将每帧中生成的信息传递给机械设备 万向节 以平移和倾斜方式移动摄像机 Design 主 Gui 在一个线程
  • Python Tkinter,停止线程函数

    我目前正在为 3D 打印机开发 GUI 并且遇到如何停止线程函数的问题 我希望能够单击 GUI 中具有另一个功能的按钮 该按钮将阻止线程函数通过串行端口发送 G 代码字符串 目前 该函数已合并线程 以允许在打印期间触发其他函数 我非常感谢有
  • 循环列表的值[重复]

    这个问题在这里已经有答案了 我是编码新手 正在尝试编写一个简单的代码 该代码将采用一个列表 例如 1 2 3 并循环元素 n 次 所以如果n 1 我应该得到A 3 1 2 如果n 2 我应该得到A 2 3 1 我写的代码是 n 1 j 0
  • 将嵌套列表转换为嵌套列表

    我知道可以将项目列表从一种类型转换为另一种类型 但是如何将嵌套列表转换为嵌套 List 已经尝试过的解决方案 List
  • 有哪些学习线程编程的好资源? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 随着多核CPU在桌面上的兴起 多线程技能将成为程序员的宝贵资产 您能为想要学习线程编程的程序员推荐一些好的资源 书籍 教程 网站等 吗 看
  • 线程安全的异步字节队列

    我有一个回调方法 只要有新数据可用 就会调用该方法 public delegate void DataCallback byte buffer int offset int count 我想将其包装在一个实现与此类似的接口的类中 publi
  • ThreadPoolExecutor 和队列

    我以为使用线程池执行器 http docs oracle com javase 6 docs api java util concurrent ThreadPoolExecutor html我们可以提交Runnables 要在以下位置执行B
  • 使用 Matplotlib、PyQt 和 Threading 进行实时绘图导致 python 崩溃

    我一直在努力研究我的 Python 应用程序 但找不到任何答案 我有 PyQT GUI 应用程序 它使用 Matplotlib 小部件 GUI 启动一个新线程来处理 mpl 小部件的绘图 恐怕我现在通过从另一个线程访问 matplotlib
  • 如何从 Android 调用 RESTful 方法?

    我尝试了两种不同的方法来从 Android 调用简单的 REST 方法 所述 REST 方法 适用于其他客户端 仅返回一个 int val 例如 17 以下两次尝试都是基于我在网上找到的代码 有一种是这样的 公共无效onFetchBtnCl
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public

随机推荐

  • 如何在 Android Jelly Bean Launcher 中添加自定义视图

    我正在努力在 android 中制作自定义启动器 我参考了android的Jellybean启动器的代码 现在我想对这个启动器进行一些修改 我想要的是 据我们所知 默认有五个工作区屏幕 我想在任何一个工作区屏幕中添加自定义视图 我的 xml
  • 从数据库中提取行(包括相关行)

    我想为 Oracle 数据库中的一行生成插入字符串 包括其他表中的所有依赖行 及其依赖行 Example CREATE TABLE a a id number PRIMARY KEY name varchar2 100 CREATE TAB
  • PDO + MySQL 和损坏的 UTF-8 编码 [重复]

    这个问题在这里已经有答案了 我在 PHP 中将 PDO 库与 MySQL 数据库一起使用 但是如果我插入任何以 UTF 8 编码的数据 例如阿拉伯单词 它就会插入到数据库中 但作为 在我自己的框架中 创建 PDO 连接后 我发送两个查询 S
  • Solr:结合 EdgeNGramFilterFactory 和 NGramFilterFactory

    我有一种情况需要同时使用 EdgeNGramFilterFactory 和 NGramFilterFactory 我正在使用 NGramFilterFactory 执行 包含 样式搜索 最小字符数为 2 我还想搜索第一个字母 例如带有前面
  • 如何通过蓝牙查询远程手机是否支持PBAP?

    假设两部Android手机通过蓝牙配对并建立连接 如何在客户端以编程方式确定远程设备 服务器 是否支持蓝牙配置文件 例如 PBAP 如果它确实支持 那么如何以编程方式启动与远程设备的 PBAP 会话 我在网上进行了广泛的搜索 但到目前为止还
  • Apache Flink:设置并行度的指南?

    我正在尝试获取一些简单的规则或指南来设置哪些值 操作员或工作 并行性 在我看来 它应该是一个数字 例如 假设我有 2 台任务管理器机器 每台都有 4 个任务槽 假设集群上没有运行其他作业 我会设置并行度吗 用于操作 喜欢过滤并映射到 8 如
  • 如何将 Jest 模拟函数的范围限制为单个测试

    我正在使用 Jest 测试库 React 编写功能测试 经过几天的绞尽脑汁 我发现当你使用 mockResolvedValue or mockResolvedValueOnce 嘲笑的范围不仅限于该测试 import React from
  • C++ 多态性和指针向量问题

    考虑以下示例代码 class Foo class Bar public Foo class FooCollection protected vector
  • 如何阻止android editText中的特殊字符?没有 Android:数字

    如何阻止android editText中的特殊字符 通过不使用机器人 数字 有没有其他方法 甚至以编程方式 EditText 有一个 onTextChanged 监听器 你可以跟踪用户输入的字符 如果该字符非法 你只需将其删除 这不是最优
  • Celery 和 RabbitMQ - 队列优先级、消费者优先级、任务优先级

    在我的 python 应用程序中 我使用 Celery 作为任务生产者和消费者 使用 RabbitMQ 作为代理 现在 我正在实施优先级 起初 它看起来根本不起作用 因为根据文档 我刚刚添加了x max priority队列的参数 我更深入
  • MKPolygon 初始化错误“调用中参数‘interiorPolygons’缺少参数”/“调用中存在额外参数”

    我正在尝试转换 MapKit 中的 Objective C 代码MKPolygon参考文献清单6 9 https developer apple com library prerelease ios documentation UserEx
  • Gradle下载源码依赖

    在 gradle 中 我有以下 build gradle 这会导致许多 JAR 被复制到 sources 文件夹中 但只有 jersey media moxy 2 22 2 sources jar 实际上包含源代码 defaultTasks
  • MVVM ViewModel 单例

    如果您不需要每个屏幕的多个实例 那么将所有 viewModels 设置为单例是错误的做法吗 是的 因为单身人士是邪恶的 https learn microsoft com en us archive blogs scottdensmore
  • 数据帧字符串操作

    我有一个数据框 其中有一列数据如下所示 AAH AAH AAR UN AAR UN AAR UN AAR UN AAV AAV AAV 我想我需要使用 apply 方法来修剪列数据 因此 如果句点之后有任何内容 则保持数据不变 但如果句点之
  • 无法连接到火狐浏览器

    我正在研究 Selenium 目前我有一个集线器连接到两个运行 Linux 和所有浏览器的虚拟机 我能够启动浏览器 直到它突然停止 Firefox 或任何其他浏览器无法启动 我收到以下错误 45000 毫秒后无法通过端口 7055 连接到主
  • Cython 程序比普通 Python 慢(10M 选项 3.5s vs 3.25s Black Scholes)-我错过了什么?

    好的 这是我的第一个 Cython 程序 它是为欧洲期货期权定价的代码 没有股息的 Black Scholes 它在 10M 选项上的运行时间为 3 5 秒 而我在下面发布的直接使用 numpy Python 3 25 的代码 谁能指出为什
  • 如何为 UserControl 中的 TabControl 提供设计器支持,以便我可以将控件拖/放到选项卡页上?

    我有一个用户控件 其中包含一个Panel 和一个TabControl 我为两者启用了设计时支持 我可以将工具箱中的控件拖 放到用户控件中的面板控件上 我还可以通过 TabControl 上的设计器添加和删除选项卡页 但是 我无法将任何控件拖
  • 为什么我们需要私有构造函数?

    如果一个类有一个私有构造函数 那么它就不能被实例化 因此 如果我不想实例化我的类并仍然使用它 那么我可以将其设为静态 私有构造函数有什么用 还有 它是用在单例类中的 但是除此之外 还有什么其他用途吗 注意 我排除上述单例情况的原因是 我不明
  • 将原始字节导入为 R 中的原始字节

    我已将数据库中的字符串导入到 R 中 数据库列类型是BYTEA Postgres 为了让我按预期使用它 它应该是类型raw 相反 它是类型character 我想在以下意义上将其转换为原始数据 字符串表示形式是 x1f8b080000000
  • Prolog查找所有路径实现

    我的任务是在 Prolog 中实现 findall 的一个版本 除了 not 和 cut 之外 不使用任何 Prolog 内置函数 所以基本上是在纯 Prolog 中 我正在尝试在树中搜索所有直系后代并在列表中返回结果 parent a b