Prolog 中的条件编写

2024-03-09

I have Prolog包含飞机时刻表的数据库。它看起来是这样的:

fly(id, from, to, days(1, 0, 1, 0, 1, 0, 1)).

正如你所看到的,有 7 个值days谓词 - 从星期一到星期日。我想做的是每天打印,价值所在1,但将其打印为文本。我试图使用if - else声明,但在这种情况下它不起作用:

(   
        A = 1 -> write(monday), nl;
        (
            B = 1 -> write(tuesday), nl;
            (
                C = 1 -> write(wednesday), nl;
                (
                    D = 1 -> write(thursday), nl;
                    (
                        E = 1 -> write(friday), nl;
                        (
                            F = 1 -> write(saturday), nl;
                            (
                                G = 1 -> write(sunday), nl
                            )
                        )
                    )
                )
            )
        )
    )

在示例中,它应该打印 4 天:

monday
wednesday
friday
sunday

我怎样才能做到这一点?


我找到了一种方法来做到这一点,基本上,您需要创建 2 个列表。第一个是您的日子,第二个是日子的名称。然后,您需要迭代它们,但是,因为事实上没有loop在 Prolog 中进行构造时,您必须使用递归函数来完成此操作。

以下是我的实现方式:

iterate_weeks([], _).
iterate_weeks([H|T], [X|Y]) :- H = 1, write(X), nl, iterate_weeks(T, Y).
iterate_weeks([H|T], [_|Y]) :- H = 0, iterate_weeks(T, Y).

print_fly_days(From, To):- 
    fly(_, From, To, _, _, days(A,B,C,D,E,F,G)),
    L = [A,B,C,D,E,F,G],
    T = [monday, tuesday, wednesday, thursday, friday, saturday, sunday],
    iterate_weeks(L, T).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Prolog 中的条件编写 的相关文章

  • 如何在 swi-prolog 的 prolog 文件中运行 prolog 查询?

    如果我有一个定义规则的 prolog 文件 并在 Windows 中的 prolog 终端中打开它 它会加载事实 然而 然后它显示 提示我手动输入一些内容 如何将代码添加到文件中 以便它实际上会评估这些特定的语句 就像我输入它们一样 像这样
  • Prolog - 从列表中删除具有相同第一个值的对

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

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

    这里尝试解决同构图问题 作业信息 判断2个无向图是否同构 没有孤立的顶点 顶点数小于30 图的边作为谓词给出 即 e 1 2 f 1 2 我正在尝试使用以下方法 对于每对边 即图 1 和图 2 中的每条边 Try to bind the v
  • Prolog 中的迷你数独求解器中途停止

    我正在学习 七周七种语言 我只是想从书中找到一个例子 它解决迷你数独网格 4x4 作者使用的是 gprolog 但我使用的是 swi prolog 无论出于何种原因 我都无法让 gprolog 在我的虚拟机上工作 但 swi prolog
  • SWI-Prolog 中的约束编程

    我想要一个包含三个元素 A B 和 C 的列表 L 并具有以下约束 use module library clpfd L A B C L ins 1 3 A B C 但是 它给出了一个错误 Syntax error Operator exp
  • 非成员规则在 Prolog 中无法按预期工作

    我正在尝试在 Prolog 中创建一个迷宫程序 其目的是找到一条从迷宫起点到迷宫中心点 m 的路线 迷宫由使用四种颜色之一连接的正方形组成 蓝色 绿色 紫色或橙色 从起点到中心的路线遵循四种颜色的重复图案 我创建了以下代码 link2 A
  • Prolog 匹配 vs miniKanren 统一

    在 Prolog 人工智能编程中 Bratko 在第 58 页说了以下内容 Prolog 中的匹配对应于逻辑中所谓的统一 但是 我们避免使用 统一 这个词 因为出于效率原因 在大多数 Prolog 系统中 匹配的实现方式并不完全对应于统一
  • 在 Prolog 中动态拆分列表

    我从序言开始几周 但我看到了更深入的操作列表的递归谓词的构造 我的问题是 是否可以构建一个谓词 将给定列表拆分为给定数量的其他列表 比如我想象的 split H T NumberLists Lists 递归实现 split 1 2 3 4
  • SWI Prolog 使用的检查优化会发生什么情况?

    去引用SICStus Prolog 手册 https sicstus sics se sicstus docs 3 12 9 html sicstus Occur html 逻辑编程背后的通常数学理论禁止 创建循环项 规定发生检查应该是 每
  • 以系统的方式报告 Prolog 中查询失败的“原因”

    我正在 Prolog 中寻找一种方法 模式或内置功能 我可以用它来返回why一组谓词失败 至少就数据库中的谓词而言 当用户在系统中提出查询时 我试图能够说的不仅仅是 那是错误的 例如 假设我有两个谓词 blue 1如果某物是蓝色的 则为真
  • Prolog家谱

    我做到了 但没有显示答案 当我询问兄弟姐妹 叔叔 阿姨时 这是我写的 有什么问题吗 uncle X Y male X sibling X Z parent Z Y uncle X Y male X spouse X W sibling W
  • 如何在 ISO Prolog 中定义(和命名)相应的安全术语比较谓词?

    标准术语顺序 ISO IEC 13211 1 7 2 术语顺序 针对所有术语 包括变量 进行定义 虽然这有很好的用途 想想实施setof 3 这使得 8 4 术语比较中内置函数的许多其他干净且合乎逻辑的使用成为声明式噩梦 到处都是 imps
  • Prolog - 如何从输入文件的给定列表中创建变量列表?

    我有一个输入谓词将文件作为列表读取 输入 文件名 列表 该列表的格式将是 9 字面意思就是下划线字符 在这里 不是一个通配符 问题是我如何编写谓词 pred List List2 然后转换所有 进入变量但保留9还在同一个位置吗 所以如果我输
  • Prolog中计算数字是否为素数

    我正在尝试计算输入是否是素数 但出了问题 这是我的代码 primeNumber X prime prime A 1 prime prime A B R is A mod B R 1 R A prime prime X B B lt A Ne
  • 变量的多个值介于 0 和数字序言之间

    所以我一直在尝试自学序言 我认为我进展顺利 然而 我有点坚持我正在尝试的这一种方法 toN N A A 等于 0 到 N 1 之间的整数值 按升序生成 所以 toN 5 A 将是 A 0 A 1 A 2 A 3 A 4 我对序言还很陌生 所
  • Prolog - 通过演绎减少知识库

    我需要创建一个规则来搜索与 my rule 匹配的事实 这些事实将用于改变知识库 my rule Conclusion Premise 我有这个知识库可以开始 dynamic is 2 is m1 house is m1 thing is
  • 将行读取到序言中的原子列表

    我需要将任何行 来自 user input 读入原子列表 例如 Example line which contains any ASCII chars into Example line which contains any ASCII c
  • 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
  • findall 的异常行为

    以下看起来很不寻常 findall X member X 1 2 3 X X 1 2 3 痕迹更是如此 trace findall X member X 1 2 3 X Call 11 findall 100058 member 10005

随机推荐

  • 为什么 C++ 编译器在创建机器代码之前将源代码翻译成汇编? [复制]

    这个问题在这里已经有答案了 我开始学习C 了解到编译器通过编译将源代码从程序变成机器代码 然而 我了解到 C 编译器实际上将源代码转换为汇编代码 作为将汇编代码转换为机器代码之前的中间步骤 这一步的目的是什么 他们为什么不直接将其翻译成机器
  • Reactjs/Apollo/AppSync 突变触发两次

    我遇到了 React Apollo AppSync 的问题 突变触发了两次 或多次 我有一个 React 应用程序 它有一个由通常的 UI 按钮 onClick 触发的更新突变
  • VS2012 发布网站 dll 而不是 cs 文件

    我有一个想要发布的简单 ASP NET 项目 我右键单击该项目并按 发布网站 但这会将我的所有 cs 文件生成到所选文件夹中 之前我一直在 bin 文件夹中获取 dll 文件而不是 cs 文件 我究竟做错了什么 问题可能出在发布设置中 请检
  • Javascript:检测 OS X“自然滚动”设置

    我面临一个问题 对于我正在做的项目 我正在检测滚轮位置 并根据该位置是否导航到下一张幻灯片 然而 一个问题是 一些 Mac 用户使用 自然滚动 反转页面上的滚动 这意味着 对于这些用户 我应该使用另一个方向的滚动作为触发器 我的问题是 有没
  • 在 VB.NET 中将 ArrayList 数据绑定到 ListBox?

    我在 VB NET 工作 我有一个名为 Invoices 的 ArrayList 其中填充了 Invoice 类的对象 我想将其数据绑定到 ListBox 以便随着 ArrayList 的内容更新并更改 ListBox 的更新 我已经在 I
  • 如何使用shell脚本访问mysql数据库?

    有没有办法使用 shell 脚本访问 MySQL 数据库 想要对多个表进行一些选择和插入 如果您能提供一些示例代码 那就太好了 因为我是脚本编写新手 这个链接似乎有你想要的信息 http www cyberciti biz faq usin
  • Android SQLite 中的多线程怎么样?

    在我的应用程序中 我必须实现一些 UI 和同步服务 它在后台运行并更新数据 同步服务并不是很简单 它使用了多线程 所以 这是我的故事 当我开始开发这个应用程序时 我对sqlite一无所知 所以我只是没有在Java中使用任何线程同步 结果 我
  • Qt 我可以在构造函数中将信号/槽连接到自身吗?

    编辑 与信号 插槽 连接无关 问题是构造函数调用构造函数 可能有更好的方法来做到这一点 我有兴趣听到这些 我有从 QLabel 派生的 MyClass 我想在信号中传递更多有关派生类的数据 而不是基本信号的数据 因此 我创建了一个插槽来拦截
  • 元音计数顺序

    这不是一个家庭作业问题 而是一个考试准备问题 我应该定义一个函数syllables word 计算音节数 一句话如下 元音的最大序列是一个音节 最终e在一个单词中不是一个音节 或者它是元音序列的一部分 的 我不必处理任何特殊情况 例如最终的
  • SQL - 将每个单词的第一个字母大写

    我知道这个线程到处都存在 但是 这是一个略有不同的情况 在我公司使用的套件中 我对 SQL 的访问权限有限 无法运行具有函数等的复杂代码 我有一个 SQL 查询 将多个列上的数据编译为一列 并使用 group by 子句来消除多重性 然而
  • TSQL RIGHT 字符串函数不起作用

    我无法理解为什么正确的功能不适合我 我试图在这里容纳尽可能多的输出 如果阅读起来令人困惑 我深表歉意 DECLARE Nbr VARCHAR 27 SELECT Nbr xmz nbr FROM xml temp AS xmz SELECT
  • 要显示此页面,Firefox 必须发送将重复之前执行的任何操作(例如搜索或订单确认)的信息

    嘿 我收到了 Firefox 的确认 To display this page Firefox must send information that will repeat any action such as a search or or
  • Cargo 是否可以在不构建应用程序的情况下下载并构建依赖项?

    有没有办法告诉Cargo http doc crates io guide html安装和构建我的所有依赖项 但不尝试构建我的应用程序 我想cargo install会这样做 但实际上它也一直用于构建我的应用程序 我想要达到一个状态carg
  • 如何从 Google Assistant 接收答案作为字符串,而不是音频流

    我正在使用 Assistant SDK 中的 python 库通过 gRPC 进行语音识别 我已识别语音并以调用该方法的字符串形式返回resp result spoken request text from googlesamples as
  • 检测 Skype 是否处于“紧凑视图”或“默认视图”

    我的应用程序的运行方式由 Skype 的视图模式决定 因为我的应用程序正在寻找类窗口TConversationWindow 如果在默认视图中 它是tSkMainForm 如果在紧凑视图中 它不是tSkMainForm 这是我尝试做的 Fun
  • 尝试将 std::pair 插入 std::set

    我无法理解这段代码中的错误是什么 include
  • 我应该将哪个会话库与 CodeIgniter 一起使用?

    我最近开始使用 CI 及其 CI 会话 但我注意到 使用 CI 会话比使用基本 PHP 会话特别耗时得多 Arrays 我有一组数据 无论登录 注销如何 它都会持续存在 称为 SESSION stats 然后我以以下形式将数据存储在该数组中
  • 如何禁用 RabbitMQ 默认 tcp 监听端口 - 5672

    我已经配置了RabbitMQrabbitmq config具有新端口号的文件 即带有 SSL 的 5671 现在我想禁用默认端口 即 5672 配置文件如下 rabbit ssl listeners 5671 ssl options cac
  • C++ 相当于指定初始化器?

    最近我一直在研究一些嵌入式设备 其中我们有一些结构体和联合体需要在编译时初始化 以便我们可以将某些不需要修改的东西保留在闪存或ROM中 并节省一点闪存或 SRAM 但会牺牲一点性能 目前 该代码编译为有效的 C99 但如果没有这种调整 它也
  • Prolog 中的条件编写

    I have Prolog包含飞机时刻表的数据库 它看起来是这样的 fly id from to days 1 0 1 0 1 0 1 正如你所看到的 有 7 个值days谓词 从星期一到星期日 我想做的是每天打印 价值所在1 但将其打印为