获取 Prolog 中的解决方案列表

2024-04-03

我正在学习 Prolog,并且正在阅读一本名为《人工智能 Prolog 编程》的书。作为练习,我想学习如何扩展本书中的示例之一。有人可以帮忙吗?

假设您有以下事实:

parent(pam, bob). %pam is a parent of bob
parent(george, bob). %george is a parent of bob

我将如何编写一个序言谓词来为我提供 bob 父母的列表?例如:

list_parents(bob, L).

L = [pam, george] ;
L = [george, pam] ;
true.

像这样的全解谓词findall/3可能会解决这个问题:

list_parents(P, L) :-
    findall(Parent, parent(Parent, P), L).

简单的说,findall/3查找所有绑定Parent在“可回溯”目标中parent(Parent, P),并将所有绑定Parent进入列表L。请注意,这不会删除重复项,但您可以执行以下操作sort/2 to L在返回它以创建集合之前。执行这个:

?- list_parents(bob, L).
L = [pam, george].

如果你没有findall/3在您的 PROLOG 实现中,您可以像这样手动执行:

list_parents(P, L) :-
    list_parents(P, [], L).

list_parents(P, Acc, L) :-
    parent(Parent, P),
    \+ member(Parent, Acc), !,
    list_parents(P, [Parent|Acc], L). 
list_parents(_, L, L).

此版本将呼叫发送至list_parents/2到累加器版本,list_parents/3。后者试图收集Parent绑定也是如此,只要我们以前没有见过它们(因此\+ member检查),并返回没有新的列表Parent绑定累积到Acc可以找到列表。执行此命令会得到与第一个选项相同的结果:

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

获取 Prolog 中的解决方案列表 的相关文章

  • Prolog 程序从列表中删除每个第 n 个元素

    您能帮我解决以下问题吗 编写三元谓词delete nth从列表中删除每个第 n 个元素 样本运行 delete nth a b c d e f 2 L L a c e false delete nth a b c d e f 1 L L f
  • 展平列表

    尝试解决练习 07http www ic unicamp br meidanis courses mc336 2009s2 prolog problemas http www ic unicamp br meidanis courses m
  • 获取 Prolog 中的解决方案列表

    我正在学习 Prolog 并且正在阅读一本名为 人工智能 Prolog 编程 的书 作为练习 我想学习如何扩展本书中的示例之一 有人可以帮忙吗 假设您有以下事实 parent pam bob pam is a parent of bob p
  • Prolog,如何在 write() 中显示多个输出

    go match Mn Fn write Matching Result nl write Mn write match with write Fn match Mn1 Fn1 person may female 25 blue perso
  • 在 Prolog 中表达“交换性”的替代方案?

    作为一个Prolog的初学者 我发现Prolog中的交换表达式非常不直观 例如 如果我想表达 X 和 Y 属于一个家庭 例如 family X Y married X Y relative X Y father son X Y 我还应该在定
  • YAP Prolog 中的正向链接?

    我需要在某些 Prolog 问题中使用前向链接器 我想避免使用普通元解释器从头开始实现它 但如果没有其他选项可用 这就是我必须要做的 因为使用元解释器执行此操作会很慢 而且我我确信应该有一些好的实现 有人知道 YAP 或 SWI Prolo
  • 如何在 Prolog 中为变量(如字符串)分配多个值?

    今天早些时候 我寻求帮助以在序言中构建数据库以及如何通过参数搜索 有人提出了这个 您还可以向每个处理器添加术语列表 例如 processor pentium g4400 brand intel family pentium series g
  • Prolog - 从列表中删除具有相同第一个值的对

    我有这样的对象列表 list obj x y obj x z obj a b obj b c 我想删除那些共享相同第一个值的元素 这样我就可以使用修改后的列表 在这种情况下 最终列表将如下所示 list obj a b obj b c 有人
  • 井字游戏的极小极大

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

    我正在尝试在 Prolog 中创建一个迷宫程序 其目的是找到一条从迷宫起点到迷宫中心点 m 的路线 迷宫由使用四种颜色之一连接的正方形组成 蓝色 绿色 紫色或橙色 从起点到中心的路线遵循四种颜色的重复图案 我创建了以下代码 link2 A
  • 在 Prolog、尾递归中计算斐波那契数列

    我想在 Prolog 中以递归尾部模式计算斐波那契数列 fibonacci 0 0 fibonacci 1 1 fibonacci N Result fibonacci N 1 0 fibonacci N Result Count Coun
  • 在列表列表中查找形状

    节目说明 该计划的目的 我的程序旨在计算 20X15 大小的平面中形状的位置 我有一个形状列表 其中包含形状类型 其 ID 半径或高度以及其在平面上的预期 X Y 位置 我有一个不同的二元运算列表 仅包含形状类型 其 id 及其与另一个形状
  • 适合从记录中提取 OneToMany 关系的约束编程

    也许有人可以帮助我解决 Prolog 或任何约束编程语言的问题 想象一个项目表 学生与母亲一起做某事的学校项目 每个项目都有一名或多名儿童参与 对于每个孩子 我们存储其姓名及其母亲的姓名 但对于每个项目 只有一个包含所有母亲的单元和一个包含
  • 如何为有效号码指定 DCG?

    我正在尝试为有效数字指定 DCG 如下所示 value Number gt valid number Number 基本上检查指定的值是否是数字 它也可能是变量 因此有必要检查 我不知道如何构建这个valid number不过 DCG 谓词
  • 斜线(/)在序言中做什么?

    我有这个代码 set value X Value X T X Value T set value X Value Y V T Y V NewT X Y set value X Value T NewT set value X Value X
  • 通过递归扩展 Prolog 目标?

    我 最终 实现了一些目标 这些目标将根据开始由 开始之后 and duration 然而 计划目标仅接受规定数量的任务 我想扩展计划目标的功能以接受单个列表并在计划时迭代该列表 不幸的是 我认为这将需要与can run and 冲突目标如下
  • Prolog中如何选择bagof、setof和findall

    如何在 bagof setof 和 findall 之间做出选择 有什么重要的区别吗 哪个最常用 哪个最安全 感谢您的评论 回答 我检查了SWI Prolog 手册页findall 3 http www swi prolog org pld
  • 如何在 ISO Prolog 中定义(和命名)相应的安全术语比较谓词?

    标准术语顺序 ISO IEC 13211 1 7 2 术语顺序 针对所有术语 包括变量 进行定义 虽然这有很好的用途 想想实施setof 3 这使得 8 4 术语比较中内置函数的许多其他干净且合乎逻辑的使用成为声明式噩梦 到处都是 imps
  • SWI-Prolog 中的跨模块“接口”调用

    这可能是 SWI Prolog 模块系统特有的 假设我们有三个 Prolog 模块 在 SWI Prolog 模块系统中 robin 在文件中robin pl arthur 在文件中arthur pl helper 在文件中helper p
  • Prolog 中的隔离列表

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

随机推荐

  • 有没有一个插件可以在我的网页中显示 HTML 代码

    我想在我的页面中显示大块 LESS 文件 我希望它看起来尽可能漂亮 以便看到它的用户能够轻松阅读 stackoverflow 让我像这样显示它 例如 header color red div myClass color blue 但是有没有
  • 如何用C#打印存储在本地硬盘上的文件?

    我在 C WinForms 中创建了一个函数 它将文件作为 gif 图像保存在本地目录中 如何访问它并将其发送到我的一台网络打印机进行打印 我现在这里有这段代码 internal void PrintLabels string printe
  • 使用 OCaml Graphics 实际更改文本大小

    我想知道如何在 OCaml 中设置文本大小 我试过Graphics set text size我想这应该可以达成交易 但无论我把set text size 200 or set text size 20并没有改变什么 Graphics se
  • 查找数字数组中两个最近元素之间的距离

    所以我正在自学我购买的这本书中的算法 并且我有一个伪代码用于查找数字数组中两个最近元素之间的距离 MinDistance a 0 n 1 Input Array A of numbers Output Minimum Distance be
  • 在文件下载响应时重新启用表单提交按钮

    这可能是一个非常简单的问题 但实际上我还没有看到很多这方面的搜索结果 我在表单中有一个非常基本的提交按钮 它接受一些用户输入 并在服务器的临时目录中生成一个可下载文件 然后提示用户下载该文件 然后在提交时禁用该文件
  • Rails:生产中不存在可供参考的类名关系

    我在迁移中创建了两个引用 它们是对我的 User 表的引用的别名 class CreateInvitations lt ActiveRecord Migration 5 0 def change create table invitatio
  • ALS模型-如何生成full_u * v^t * v?

    我试图弄清楚 ALS 模型如何在批处理更新期间预测新用户的值 在我的搜索中 我遇到了这个堆栈溢出答案 https stackoverflow com a 34729751 1033422 为了方便读者 我将答案复制如下 您可以使用经过训练的
  • 如何在链轮预处理的 js 文件(不是视图)中获取 escape_javascript 和其他帮助程序?

    我正在使用 Rails 3 1 和链轮的东西 我想使用 ERB 预处理 js 文件 然后使用 javascript include tag 包含该文件 它是从代码生成的 因此我使用 ERB 对其进行预处理 但我无法从 ActionView
  • 合并从 python 多进程调用函数返回的数据帧

    from multiprocessing import Pool with Pool processes 6 as p p starmap update tabl zip r 我正在使用此处概述的方法 https web archive o
  • 使用回调令牌的 PHP EWS

    有没有人有幸使用 EWS 回调令牌而不是用户名 密码对来自 PHP 的 EWS SOAP 请求进行身份验证 我一直在看PHP EWS https github com jamesiarmes php ews当您在谷歌上搜索此项目时会出现该项
  • 带下拉图标 V 形的 Bootstrap 手风琴导航

    我有一个引导导航选项卡导航堆叠列表 需要使用手风琴折叠所有列表 除了最近单击的列表或具有活动子项的列表 我有这个工作 但似乎无法弄清楚如何让 V 形改变方向 除非点击 我以前只是将其设置为折叠 而不是手风琴折叠 所以需要一些 javascr
  • 如何以静默模式提取 WinZip 自解压 exe

    我使用 WinZip Self Extractor 创建了一个 exe 文件 它以 UI 模式提取文件 即双击安装程序时会打开一个新窗口 显示正在解压缩 setupname exe 我需要在静默模式下提取相同的 exe 该模式不应显示解压缩
  • 使用内部脚本设置innerHTML [重复]

    这个问题在这里已经有答案了 如果我在任何页面上的 Firebug 中运行以下行 document documentElement innerHTML 为什么不是alert命令执行 看起来你的
  • Perl:使用 XML::Twig 插入 XML::Twig 节点

    我正在比较两个 XML 文件 如果我发现其中一个文件中缺少节点 我想将其插入到另一个文件中 这是我一直在尝试的方法 my out file fbCI report xml open my fh out gt gt out file or d
  • Intellij“作为 Android 应用程序运行”缺失

    android模拟器运行确实很慢 我发现Genymotion运行得很快 当我尝试与 Intellij 一起使用时 在我遵循此文档中的每一步之后https cloud genymotion com page doc 我陷入了这个项目 在您的应
  • 如何在 Spring Data ES 3.2.0.M1 中使用高级 Rest 客户端

    Spring Data ES 3 2 0 M1 仍然使用旧的TransportClient代替HighLevelRestClient Spring Data ES 3 2 0 M1 支持高级 Rest 客户端 请参阅添加对 Java 高级
  • Android Web 浏览器主页

    我见过一些应用程序和广告网络 例如 startapp 通过代码更改 Android 网络浏览器主页 这怎么可能 我查看了startapp sdk 但我没有找到他们更改主页的部分 我也看过BrowserSettings in com andr
  • Spring Batch 数据库连接不可用,请求超时

    在使用 Spring Batch 进行项目的过程中 我遇到了以下问题 该项目包括 MySQL 数据库 mysqld 10 2 13 MariaDB Spring Boot 2 1 1 RELEASE 春季批次 4 1 0 RELEASE S
  • Laravel postgres sql 不区分大小写喜欢

    我在 Laravel 中有一个 postgres sql 查询 query Article join users articles user id users id gt select users articles if array key
  • 获取 Prolog 中的解决方案列表

    我正在学习 Prolog 并且正在阅读一本名为 人工智能 Prolog 编程 的书 作为练习 我想学习如何扩展本书中的示例之一 有人可以帮忙吗 假设您有以下事实 parent pam bob pam is a parent of bob p