Prolog - 将列表的偶数元素乘以数字 (F)

2023-12-01

我正在 Prolog 中编程,从任何给定的数字(F)开始,将列表中的偶数元素相乘;保留那些不是的值,开发了以下内容,实际上程序“编译”没有任何错误,但在输入值时它只返回“false”,我哪里可能错了?:

% base case
evenproduct(_,[],[]) :- !.

% recursive case
evenproduct(F,[X|Xs], [Y|Ys]) :-
   Y is F*X,
   X mod 2 =:= 0,
   evenproduct(F, Xs, Ys), !.

Thanks!!


你不应该使用削减(!目标)。剪切是一个高级的 Prolog 概念,只有当您成为更高级的 Prolog 程序员时才有用。在此之前,削减只会让你感到困惑。此外,削减通常不会使你的计划更频繁地成功,但会使其更频繁地失败。你的问题是你的程序失败得太频繁了!削减可能是您问题的一部分。

另外,你的程序总是返回 false 并不完全正确。看,它确实适用于某些输入:

?- evenproduct(3, [2, 4, 6], Ys).
Ys = [6, 12, 18].

也就是说,如果给定的列表仅包含偶数,则您的程序将完全按照预期运行。到目前为止做得很好!

您现在需要做的是在列表中的数字之一为奇数的情况下也能成功。有一种主要方法可以使 Prolog 程序更频繁地成功:向某些谓词添加更多子句。

你的定义evenproduct/3到目前为止有两个条款。也许到目前为止您所看到的所有列表处理谓词总是有两个子句,一个用于“基本情况”,一个用于“递归情况”。但有几个非递归或几个递归子句是完全可以的,而且通常是非常必要的。对于您的情况,您可以将以下子句添加到您的程序中以使其正常工作:

evenproduct(F,[X|Xs], [Y|Ys]) :-
   Y = X,
   X mod 2 =:= 1,
   evenproduct(F, Xs, Ys).

所以现在你将拥有three总共有 1 个非递归子句和 2 个递归子句。

现在奇数也被接受:

?- evenproduct(3, [1, 2, 3, 7, 11, 22], Ys).
Ys = [1, 6, 3, 7, 11, 66] ;
false.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Prolog - 将列表的偶数元素乘以数字 (F) 的相关文章

  • 在列表列表中查找共同元素

    我有一个名为 wordlist 的单词列表列表 如下所示 dog cat sheep rabbit kiss time cow pig bomb cat sheep cake boy new 我想找到所有子列表中的共同元素 因此 我期望的上
  • json 获取 prolog 谓词

    我试图在序言中创建这个谓词 谓词json get 3可以定义为 json get JSON obj Fields Result 这是正确的 当Result可以通过以下方式恢复 中的字段链Fields 列表 从JSON obj 一个字段 代表
  • Java 8 Streams - 嵌套映射到列表

    firstlist stream map x gt return secondList stream map y gt return a string collect Collectors toList Output I need Get
  • 列表子类的 Python 类型

    我希望能够定义列表子类的内容必须是什么 该类如下所示 class A list def init self list init self 我想包括打字 这样就会发生以下情况 import typing class A list typing
  • 在Python中将字符串转换为字典或列表?

    在Python中将此字符串转换为列表或字典 u f i r s t n a m e u j o h n u l a s t n a m e u s m i t h u a g e 2 0 u m o b
  • 如何使用流从两个列表或数组乘法中查找元素对

    我有两个数字列表 我想找到所有可能的数字对 例如 给定列表 1 2 3 and 3 4 结果应该是 1 3 1 4 2 3 2 4 3 3 3 4 我知道我可以使用for loop但有没有更简洁的方法来使用Java 8 流 我尝试了以下操作
  • 如何访问数据框中的一行嵌套字典

    我有一个 json 文件 如下所示 file name main question no Q 1 question what is answer user John comment It is defined as value number
  • 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#

    我有这门课 public class Leg public int Day get set public int Hour get set public int Min get set 我有一个获取腿列表的函数 称为 GetLegs Lis
  • 如何在 Python 中使用 .format() 打印“for”循环中的列表?

    我是 Python 新手 我正在编写一段非常简单的代码 使用 for 循环打印列表的内容 format 我想要如下的输出 但我收到此错误 names David Peter Michael John Bob for i in names p
  • 使用部分函数短路列表映射

    因此 我创建了一个名为 tryMap 的函数 如下所示 tryMap with failure and success continuations let rec tryMapC R gt U list gt R gt T gt U opt
  • 按相反顺序对列表进行排序

    我有直接顺序的列表 list1 List
  • Java排序列表

    我在java中得到了一个列表 我从 SQL 查询中获取值 public void ReloadPages throws Exception try Connection conn Framework GetDatabaseManager G
  • java交叉连接两个列表

    我有一个 ABC 类 其中包含两个整数字段 public class ABC private Integer x private Integer y getters and setters 我有两个列表 xValues 和 yValues
  • 在 HTML 下拉列表中有一个滚动条

    我正在寻找一种在 HTML 的下拉列表中添加滚动条的方法 这样如果下拉列表包含的内容超过例如 5 项 将出现滚动条以查看其余项 这是因为我将被迫列出一些大清单 过去几个小时我一直在谷歌上搜索它 但没有运气 它需要适用于 IE8 FF 和 C
  • 合并一个对(元组)列表?

    从链接对的列表中 我想将这些对组合成公共 ID 组 这样我就可以将 group ids 写回数据库 例如 UPDATE table SET group n WHERE id IN Example 1 2 3 4 1 5 6 3 7 8 be
  • Django 检索 GET 列表

    我是 Django 新手 我有一个 URL 列表 例如 example com item test item for test url 我知道如何在视图中检索该值 a request GET getlist item 我的问题是 如何在模板
  • 使用 FIND 命令进行并集、交集和排除?

    我需要使用 find 命令管理列表 假设列表在非不同列表中具有随机名称 即它们的交集不是空集 我能怎么做 A B 查找列表A中除列表B中的文件之外的文件 A 路口 B 查找列表 A 和 B 共有的文件 请咨询here https stack
  • Prolog 否定和逻辑否定

    假设我们有以下程序 a tom v pat 和查询 返回 false a X v X 当追踪时 我可以看到X被实例化为tom 谓词a tom 成功 因此 a tom fails 我在一些教程中读到 不 在Prolog中只是一个测试 不会导致
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List

随机推荐

  • .net core AsyncLocal 失去了价值

    我使用类似的模式HttpContext访问器 简化版本如下 Console WriteLine SimpleStringHolder StringValue 不应该为空 public class SimpleStringHolder pri
  • 如何查看mysql中索引的大小(包括主键)

    2个常见的答案是使用显示表状态 and INFORMATION SCHEMA TABLES 但似乎 他们都没有计算主键的大小 我有包含数百万条记录的表 带有主键且没有其他索引 上面提到的两种方法都显示Index length 0对于那些桌子
  • 试图获取非对象 SimpleXML 的属性?

    我当前正在使用以下代码从 REST api 检索信息 url http api remix bestbuy com v1 products 28upc upc 29 apiKey API KEY xmlfiledata file get c
  • 如何将函数应用于 data.frame 的每个元素?

    我想将一个数值转换为一个因子 如果该值低于 2 则 down 应该是因子 如果它高于2 则 up 和 no change 之间 到目前为止我考虑过创建一个函数 classifier lt function x if x gt 2 retur
  • APDU 在 mifare classic 上写入块命令

    我一直在尝试将一些数据写入我的 Mifare 经典卡 首先我发送这两个命令 返回 90 00 加载 Mifare 钥匙 FF 82 20 01 06 FF FF FF FF FF FF 认证 FF 86 00 00 05 01 00 01
  • 制作 iPhone 应用程序时是否可以嵌入或加载 SWF(Apple 是否允许)

    我对在为 iphone 制作应用程序时是嵌入 swf 还是加载它们有点困惑 有谁知道每个的优点是什么 最好使用哪个 我知道嵌入 swf 应该比加载它们快一点 但这就是全部吗 另外 这一点很重要 我读到苹果将拒绝任何带有外部 swf 的应用程
  • Android 中读取文本文件并以 TextView 形式输出

    我正在尝试读取已保存在我的目录中的文本文件并将其作为 TextView 打印在屏幕上 这是我到目前为止所拥有的代码 但是 当我运行该应用程序时 它会创建一个 toast 上面写着 读取文件时出错 我在这里做错了什么 public class
  • 数据网格视图更新

    我在 C 中使用 2005 Windows 窗体 我只花了一天的时间 所以请放轻松 我想要一个提交按钮来保存对 DataGridView 的更改 我已将数据存入 DGV 并可以编辑 但卡在 Update 上 我创建了一个名为 scDB 的
  • $.browser 的替代品是什么

    jQuery 文档标签 browser已弃用 那么它的替代品是什么 基于jQuery 迁移插件 我找到了这个 jQuery uaMatch function ua ua ua toLowerCase var match chrome w e
  • INotifyPropertyChanged 不会导致此代码中的屏幕更新

    下面的代码是基于此post 我的问题 我看不出我做错了什么来让 INotifyPropertyChanged 导致 textBox1 绑定自动反映这个简单示例中的更改 XAML 我添加了 textBox2 以确认属性正在更改
  • 观察者模式应该包括一些无限循环检测吗?

    快速浏览一下GoF和Head First Design Patterns这本书 似乎没有提到观察者模式的无限循环检测和处理 我认为如果是在2个类之间 我们可以更加小心无限循环问题 但是如果有5个类或12个类 并且观察者走向多个方向怎么办 在
  • Twitter bootstrap 输入标签无法与 Jquery before() 一起使用

    我正在使用 Jquery 克隆 一个 div 并更改其子级的 id 其中一个子级是Bootstrap标签输入 你可以找到一个演示在这里 点击后添加新运行添加了新的 div 但标签输入不可编辑 这是我的代码 您可以查看完整代码here add
  • 使用 OpenId AppAuth-Android 库时,具有隐式意图的 PendingIntent 返回已取消异常

    我正在尝试实现 oauth2 以使用户能够使用 Reddit 登录 我已经使用适当的重定向 uri 在 reddit 上创建了我的应用程序 我做了什么 带有登录按钮的 MainActivity 单击登录按钮 启动授权流程 要创建授权请求 我
  • mysql触发器操作数应包含2列

    我的触发器看起来像这样 begin IF NEW tgebucht gt NEW tteilnmax AND NEW tgebucht 0 AND OLD tstatus 0 THEN SET NEW tstatus 1 ELSEIF NE
  • 如何使用新的 HTML5 Boilerplate 来定位 IE9?

    我正在尝试为 IE 指定一个类 但是 由于样板模板已更改 因此不再有效 myclass do something ie7 myclass do something 这是样板模板的新标题中的内容
  • JavaMail base64 编码

    我有一些 Java 代码 它会发送一封电子邮件 代码如下 MimeBodyPart part new MimeBodyPart part setContent htmlString text html charset UTF 8 part
  • 如何解决 Rails 插件上的 rake 任务弃用问题?

    由于引入的概念here Rails Plugin 只不过是一个 Rails Engine 但由于它已加载 在启动过程中为时已晚 它确实 不具有相同的配置权力 作为一个裸露的 Rails Engine 与 Rails Railtie 相对并且
  • NestJS/TypeORM:无法设置只有 getter 的 # 的属性元数据

    我尝试运行我的 Nestjstutorial 应用程序 显示以下错误 我的后端连接到 PostgreSQL 数据库 TypeError 无法设置只有 getter 的 属性元数据 在 EntityManager getCustomRepos
  • 使用代码默认值对集合属性进行 XML 反序列化

    对于应用程序配置 我经常会创建一个配置类 其中包含应用程序的配置值 然后将其反序列化为要使用的对象 配置对象通常与用户界面控件进行数据绑定 以便用户可以更改和保留配置 配置类通常具有分配给属性的默认值 以便始终存在默认配置 这效果很好 我最
  • Prolog - 将列表的偶数元素乘以数字 (F)

    我正在 Prolog 中编程 从任何给定的数字 F 开始 将列表中的偶数元素相乘 保留那些不是的值 开发了以下内容 实际上程序 编译 没有任何错误 但在输入值时它只返回 false 我哪里可能错了 base case evenproduct