多个事实的聚合解决方案

2024-03-15

尝试创建一个谓词 (timePeriod/2)计算特定事实的两个日期之间的时间段。我已经设法自己做到这一点,但当“其他答案”存在于同一列表中时会遇到问题(即更容易用示例解释)。

我有以下知识基础事实;

 popStar('Jackson',1987,1991).
 popStar('Jackson',1992,1996).
 popStar('Michaels',1996,2000).
 popStar('Newcastle',2000,2007).
 popStar('Bowie',2008,2010).

下面的函数计算特定事实的日期之间的时间(如下所示)。

谓词 (timePeriod/2) -

 timePeriod(PS,X) :-
    bagof((Name,Start,End),popStar(Name,Start,End),PSs),X is End-Start+1)

以鲍伊为例;它返回X=3(哪个是对的)。

然而,当列表中存在重复且有多个可用答案时,谓词仅声明“假”。以事实“杰克逊”为例,我希望能够计算这两个事实的两个时间段;同时。

因此,如果谓词适用于杰克逊的两个事实,则该谓词timePeriod会说明X=10.

如果有人可以建议更改哪些内容以使其正常工作,我将非常感激。

Thanks.


你可能不太明白什么foreach/3做。我不认为我完全理解foreach/3任何一个。我确信它是not和说的一样:

for each x in xs:
    do foo(x)

另一件事:Prolog 中的“元组”并不是您所期望的,它来自 Python 或 Haskell 等语言。这:(a,b,c)实际上是这样的:','(a,','(b,c))。更好的是使用扁平术语,通用形式是triple(a,b,c)。对于一对,习语是First-Second.

因此,您可以简化您的调用bagof/3对此:

?- bagof(From-To, pop_star(Name, Start, End), Ts).
Name = 'Bowie',
Ts = [2008-2010] ;
Name = 'Jackson',
Ts = [1987-1991, 1992-1996] ;
Name = 'Michaels',
Ts = [1996-2000] ;
Name = 'Newcastle',
Ts = [2000-2007].

一旦你有了上面的列表,你需要总结差异,这可能是这样的:

periods_total(Ps, T) :-
    maplist(period_length, Ps, Ls),
    sum_list(Ls, T).

period_length(From-To, Length) :-
    Length is To - From + 1.

然后你可以这样查询:

?- bagof(From-To, pop_star('Jackson', From, To), Ps), periods_total(Ps, T).
Ps = [1987-1991, 1992-1996],
T = 10.

?- bagof(From-To, pop_star(Name, From, To), Ps), periods_total(Ps, T).
Name = 'Bowie',
Ps = [2008-2010],
T = 3 ;
Name = 'Jackson',
Ps = [1987-1991, 1992-1996],
T = 10 ;
Name = 'Michaels',
Ps = [1996-2000],
T = 5 ;
Name = 'Newcastle',
Ps = [2000-2007],
T = 8.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个事实的聚合解决方案 的相关文章

  • 使用 Python 计算 Spark 中成对 (K,V) RDD 中每个 KEY 的平均值

    我想与 Python 共享这个特定的 Apache Spark 解决方案 因为它的文档非常贫乏 我想通过 KEY 计算 K V 对 存储在 Pairwise RDD 中 的平均值 示例数据如下所示 gt gt gt rdd1 take 10
  • 根据一个值找到列表内列表的最小值

    我在序言中有这个列表 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
  • MySQL SELECT OpenCarts 数据库中的重复行

    只是玩一下 OpenCart DB 看看我是否能学到一些东西 如果我使用以下SELECT结果返回重复的行 SELECT DISTINCT p product id AS pid p model AS modelo SUBSTRING p m
  • Swift - UICollectionView 重复(重复)单元格

    你好 我有一个数组 其中包含从 flickr 获取的 100 张图片 url 当我使用 UICollectionView 时 我显示 100 个单元格 屏幕上只有 8 个单元格 当我向下滚动查看下一个 8 个单元格时 它们与前一个单元格相同
  • 通过递归扩展 Prolog 目标?

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

    aggregrated table df input groupBy city income bracket agg count suburb alias suburb sum population alias population sum
  • Prolog 中的隔离列表

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

    我正在玩 LINQ 来了解它 但我不知道如何使用Distinct https learn microsoft com en us dotnet api system linq enumerable distinct当我没有一个简单的列表时
  • 如何让 Prolog 解释你的结果超出真实的陈述

    我有以下事实和规则 flight sea msp flight msp jfk route A B flight A B route B A flight A B route A C flight A B flight B C 当查询rou
  • Prolog DCG:找到最后一个元素

    我正在尝试更好地理解 DCG 的用途 为了做到这一点 我尝试将 LearnPrologNow 书中的一些练习转换为 DCG 表示法 然而 我却失败得很惨 我试图编写一个程序 仅命名列表中的最后一个元素 就这样 我只是想不出正确的 DCG 语
  • Prolog - 通过演绎减少知识库

    我需要创建一个规则来搜索与 my rule 匹配的事实 这些事实将用于改变知识库 my rule Conclusion Premise 我有这个知识库可以开始 dynamic is 2 is m1 house is m1 thing is
  • aggregate() 将多个输出列放入矩阵中

    我要计算某个变量的多个分位数 gt res1 lt aggregate airquality Wind list airquality Month function x quantile x c 0 9 0 95 0 975 gt head
  • 列表中小于给定数字的数字

    xMenores xMenores X H T R Z xMenores X T Z X gt H R is H xMenores采用三个参数 第一个是数字 第二个是数字列表 第三个是一个列表 是将包含结果的变量 规则的目标xMenores
  • 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
  • 序言中的“如果”?

    有没有办法在序言中执行 if 操作 例如如果变量为 0 则执行一些操作 将文本写入终端 甚至不需要 else 但我找不到 if 的任何文档 是的 ISO Prolog 中有这样一个控制结构 称为 gt 你像这样使用它 condition g
  • 如何找到在matlab中重复的矩阵的每一行的索引?

    我想找到矩阵中所有有重复项的行的索引 例如 A 1 2 3 4 1 2 3 4 2 3 4 5 1 2 3 4 6 5 4 3 要返回的向量将是 1 2 4 很多类似的问题建议使用unique函数 我已经尝试过 但我能得到的最接近我想要的功
  • django-过滤器和聚合函数

    这是一个特定于应用程序的问题 Django 过滤器 https github com alex django filter 这里给没用过的人简单说明一下 f ProductFilter request GET queryset Produc
  • 使用其他聚合中的数据检查命令的有效性

    我目前正在开发我的第一个更大的 DDD 应用程序 目前来说 它运行得很好 但我们从早期就陷入了一个让我无法停止思考的问题 在我们的一些聚合中 我们保留对另一个聚合根的引用 这对于整个应用程序非常重要 基于它们的 ID 因此不存在硬引用 删除

随机推荐

  • 用我自己的值初始化pytorch卷积层

    我想知道是否有办法用我自己的值初始化 pytorch 卷积过滤器 例如 我有一个元组 0 8423 0 3778 3 1070 2 6518 我想用这些值初始化 2X2 过滤器 我该怎么做 我查找了一些答案 但他们大多使用火炬正态分布和其他
  • Puppeteer 等待所有图像加载然后截图

    我在用傀儡师 https github com GoogleChrome puppeteer尝试在所有图像加载后截取网站的屏幕截图 但无法使其正常工作 这是到目前为止我正在使用的代码https www digg com https www
  • 使用position_dodge绘制geom_segment

    我有一个数据集 其中包含个人随时间的工作地点信息 更具体地说 我有关于个人在特定工作场所工作的时间间隔的信息 library tidyverse library lubridate individual A a id lt c rep A
  • 为什么我的 venv 使用的 pip 版本与我安装的不同

    我正在设置虚拟环境 我收到有关过时 pip 19 2 的警告 因此我在全球范围内更新了我的 macos 系统上的 pip sudo H python3 m pip install upgrade pip 它似乎有效 但是当我制作新的 ven
  • 如何使用 CSS/Javascript 根据窗口高度使 div 在两个 div 之间自动调整其高度?

    我有一个 div 位于正文顶部 另一个 div 位于正文底部 现在我想在这两个 div 之间放置一个 div 并使其高度占据这两个 div 之间的最大可用空间 这两个 div 之间的垂直空间不是固定的 这意味着当用户减小 增加窗口的高度时
  • Android Studio 观察表达式持久性

    每次调试后 Android Studio 都会删除我的所有监视表达式 我怎样才能强制它保留我的手表并将它们保存在项目中 据我所知 没有办法保存手表 但是 您可以使用 自动变量模式 左下角调试器选项卡 gt gt 设置按钮 这将清理调试器变量
  • 在 keyDown 事件中获取修饰符Flags,而无需同时按下非修饰键!

    我在 NSDocument 应用程序中对 NSWindow 进行了子类化 以便接收 keyDown 事件 我在我的子类中使用了以下代码 void keyDown NSEvent theEvent NSLog keyDown if theEv
  • 如何在 ILNumerics 中配置刻度标签位置?

    I draw some lines with ILLinePlot 然后我旋转立方体 目的是更改从顶部开始的 Y 刻度标签的位置 Rotation Matrix4 Rotation new Vector3 1 0 0 ILMath pif
  • 显示构建日期

    我目前有一个应用程序在其标题窗口中显示内部版本号 这很好 但对大多数用户来说没有任何意义 他们想知道他们是否拥有最新版本 他们倾向于将其称为 上周四的 而不是版本 1 0 8 4321 计划是将构建日期放在那里 例如 应用程序构建于 21
  • 当我从另一个方法调用方法时,React-native Bridge 为零

    但我注意到 每当我从另一个方法调用它时 我的桥变量都是零 我相信这是因为只有在从 javascript 调用桥接方法时才会设置桥接 我已经尝试了从创建委托到创建 SingleTon 类的所有方法 以上都不起作用 我不明白为什么它只能在我从
  • Streamfield 中的 Wagtail SnippetChooserBlock

    我在从片段中获取值时遇到一些问题 我已使用片段选择器块将其包含到流场中 生物片段 register snippet class BioSnippet models Model name models CharField max length
  • 无法引用函数,因为它是已删除的函数

    你好 我正在从一本书上学习 C 正在做下面的练习题 编写一个接受并返回 istream 的函数 该函数应该读取流 直到到达文件末尾 该函数应将其读取的内容打印到标准输出 在返回流之前重置流使其有效 include stdafx h incl
  • OBD2 - ELM327蓝牙模拟器[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发 Android 应用程序 用于通过蓝牙连接到汽车单元的 ELM327 有没有模拟器可以通过
  • 使用 Gradle 添加到 WAR 包中的错误文件

    我正在使用 Gradle 1 5 并且我正在尝试适应战争插件 http www gradle org docs current userguide war plugin html到 Eclipse 动态项目 当 WAR 被 eclipse
  • 禁用该复选框时不应进行更新

    我有两页 一页是管理员 另一页是教师 管理员将科目分配给教师 教师只想选择所需的时间 我的问题是我不想对禁用的复选框执行更新查询 我已经尝试了下面的代码 但它也在更新禁用复选框 using SqlConnection con2 new Sq
  • 当 A-lx 是奇异且无解时的特征向量

    R 如何找到以下矩阵的特征向量 特征值是 2 2 所以特征向量需要求解solve matrix c 0 1 0 0 2 2 这是无解的奇异矩阵 gt eigen matrix c 2 1 0 2 2 2 values 1 2 2 vecto
  • 了解elasticsearch jvm堆的使用情况

    Folks 我正在尝试减少 Elasticsearch 部署 单节点集群 中的内存使用量 我可以看到正在使用 3GB JVM 堆空间 为了优化 我首先需要了解瓶颈 我对 JVM 使用如何分配的了解有限 字段数据看起来消耗 1 5GB 过滤器
  • 如何使用 PhpStorm 和 Xdebug 调试 AJAX (POST)?

    我已将 PhpStorm 配置为调试 HTTP GET 但仅当我直接加载页面时 当我想要调试 AJAX 时 我获取 JS 请求的 URL 并创建一个 PhpStorm 配置来调试它 不是特别优雅 是吗 当然 我不能对 POST 请求这样做
  • 什么是投影?

    从数据库理论和 NHibernate 的角度来看 使用 SetProjection 时什么是投影 投影是关系代数的基本运算之一 它采用一个关系和该关系的属性列表 可能为空 作为输入 它输出仅包含指定属性列表的关系删除重复的元组 换句话说 输
  • 多个事实的聚合解决方案

    尝试创建一个谓词 timePeriod 2 计算特定事实的两个日期之间的时间段 我已经设法自己做到这一点 但当 其他答案 存在于同一列表中时会遇到问题 即更容易用示例解释 我有以下知识基础事实 popStar Jackson 1987 19