根据给定索引和元素数量的列表创建子列表。序言

2024-01-07

我正在尝试解决一个简单的序言问题,但我无法解决它。从列表中,需要创建一个给定索引 I 的子列表,然后从 I 中创建一个给定为 N 的下一个元素。如果索引大于列表长度,我将使子列表为空。如果 N(元素数量)大于列表中的其余元素,我将获得从 I 到末尾的所有元素。

在这里,我得到了作业的一部分,我可以从索引 I 中得到下一个元素 N。现在我询问作业中的其他部分:

1) When I(索引)比列表长度长,我必须在子列表中获取一个空列表。

?- sublist([a,b,c,d],5,2,L)

L=[]

2) When N(下一个元素)大于我们剩余的元素数量,我需要获取从该位置到末尾的所有元素。

?- sublist([a,b,c,d],4,4,L)

L=[d]      

我已经拥有的代码是下一个,这个正在工作:

sublist([X|_],1,1,[X]).
sublist([],_,_,[]).% I use this one for the case bases
sublist([X|Xs],1,K,[X|Ys]):-
       K>1, 
       K1 is K-1,
       sublist(Xs,1,K1,Ys).
sublist([_|Xs],I,K,Ys):-
       I > 1, 
       I1 is I-1,
       sublist(Xs,I1,K,Ys).

sublist([X|_], 1, 1, [X]).

这是一个很好的条款。它表示从列表中取出一个从 1 开始的长度为 1 的子列表[X|_] is [X].

sublist([X|Xs], 1, K, [X|Ys]) :-
    K > 1, 
    K1 is K - 1,
    sublist(Xs, 1, K1, Ys).

这也是一个很好的条款。它说长度的子列表K从 1 开始取自[X|Xs]以。。开始X并且有一条尾巴Ys这是长度的子列表K-1从第一个列表的尾部开始(Xs) 从 1 开始。

sublist([_|Xs], I, K, Ys) :-
    I > 1, 
    I1 is I - 1,
    K1 is K - 1,
    sublist(Xs, I1, K1, Ys).

这个条款有问题。如果你有一个清单[_|Xs]并想要获取长度的子列表K开始于I (for I大于 1),则取长度的子列表K-1从它的尾部开始的位置I-1。问题是:为什么子列表现在需要长度K-1?该子句的目的应该是将问题减少到处理起始索引为1,然后让第二个子句处理其余的事情。

然后在您对所需行为的定义中,您有:如果 N(元素数量)大于列表中的其余元素,我将获得从 I 到末尾的所有元素。目前任何条款中都没有这个概念。基本情况当前是您的第一个子句,它特别需要长度为 1 才能生成长度为 1 的列表。您需要另一个基本情况子句来处理第一个列表为空但K可能仍然是任何值:

sublist([], ?, _, ?).

只需填写?与一些合乎逻辑的事情。 :)

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

根据给定索引和元素数量的列表创建子列表。序言 的相关文章

随机推荐

  • GAE 上的 Struts 2:无法在拦截器内设置会话值

    我正在编写一个 Struts 2 拦截器 在其中检查用户是否有效 如果无效 用户将被重定向到登录页面 但在此之前 我尝试检索用户访问此处的 URL 并将其放入会话变量中 以便在登录完成后我可以将他重定向回那里 但是当我尝试在会话中放入一个值
  • background-position-y 在 Firefox 中不起作用(通过 CSS)?

    在我的代码中background position y不起作用 在 Chrome 中可以 但在 Firefox 中不行 有人有什么解决办法吗 如果你的position x是0 除了写之外没有其他解决方案 background positio
  • Wiki 数据导入 virtuoso

    我想将维基数据加载到 virtuoso 中 经过几天的搜索 我找不到任何教程 或者至少找不到使用 virtuoso 来 sparql 查询 wikidata 的人 我不想白花钱买一台服务器来加载50G 的数据 例如 为什么是 virtuos
  • 使用polyfit来预测物体掉落的位置?

    我有一个物体以抛物线模式抛出的信息 从开始位置到结束位置 按照特定时间间隔总共拍摄了 30 张图像 现在我已经成功提取了所有 30 张图像中被抛出物体的 x y 坐标 我认为使用 polyfit 或者也许是 polyval 可以帮助我预测前
  • 如何使用 QSocketNotifier (linux) 监视串行端口?

    有人可以给我一个关于如何设置 QSocketNotifier 在发生事件时触发事件的示例吗 dev ttyS0 最好在 python pyqt4 中 下面是一个使用 QSocketNotifier 不断读取文件的示例 只需将 foo txt
  • SQL 2005中检查外键是否存在的方法

    有没有一种简单的方法来检查表中的列是否存在外键 我正在编写一个脚本 仅当外键不存在时才会添加外键 您可以使用这个脚本 IF EXISTS SELECT FROM sys foreign keys WHERE object id OBJECT
  • Google Javascript API 地理编码限制

    使用 Google Maps JavaScript API v3 进行客户端地理编码有哪些限制 我的研究 Google Maps PHP API 每天的地理编码请求限制为 2500 个 https developers google com
  • 如何将热量输出包含在 wix 文件中? (没有 Visual Studio 项目)

    我需要构建一个安装程序 并且出于多种原因 我想避免使用 WiX 项目模板 我非常高兴自己编写这些东西的脚本 并且已经有了一个适合它的自定义构建流程 我相信我很好地理解了 WiX 蜡烛 加热和照明工具的作用 我正在熟悉 wxs 文件格式 并且
  • 为什么 GDB 计算浮点运算的方式与 C++ 不同?

    我在尝试处理浮点算术问题时遇到了一些令人困惑的事情 首先 代码 我将问题的本质提炼到这个例子中 include
  • 如何向 Xcode 4.4 添加本地化语言?

    参考本指南 如何使用 Xcode 4 本地化我的应用程序 https stackoverflow com questions 5349066 how to localize my app with xcode 4 我注意到在本地化下 我的
  • ClientBase 未实现 IDisposable 成员

    如果 Dispose 方法声明不可见 声明 那么 System ServiceModel ClientBase 抽象类如何实现 IDisposable 接口 如果我尝试做同样的事情 我会收到错误并且无法编译 abstract class A
  • SQL Server - 按小时、多天查询

    我希望使用 datepart 运行 SQL 查询 将数据拆分为每小时增量 然后使该查询运行多天 目前 我只是将日期增加一天 然后运行多个查询 我想知道是否有一种方法可以将这一切合并到一个查询中 该查询将提供整个日期范围的输出 select
  • php 中特定日期的上一个工作日

    我正在寻找获取特定日期的最后一个工作日的最佳方法 我使用的示例是平安夜 12 月 24 日 前的最后一个工作日 不幸的是这不起作用 echo date l jS of F Y h i s A strtotime last weekday b
  • .Net 4.5:我应该使用 IDataErrorInfo 还是 INotifyDataErrorInfo?

    我以前用过IDataErrorInfo在我的 MVVM WPF 应用程序中 现在之后INotifyDataErrorInfo在 Net 4 5中可用 是否最好替换IDataErrorInfo或继续使用旧方法IDataErrorInfo 有许
  • 对象函数 (a,b){return new e.fn.init(a,b,h)} 没有方法 'cookie'

    试图获取 a 的值cookie如果它设置并更新div与cookievalue 否则生成一个80 100之间的随机数 将其设置为cookie 然后更新div 我收到错误 Object function a b return new e fn
  • 如何在 html 元素上重写 onkeydown ?

    我继承了一个在弹出窗口中实现禁用 F5 的应用程序 但是 如果用户单击窗口正文下方并按 F5 页面仍会刷新 我将函数调用移至 现在 F5 被禁用 一切都按预期工作 然而 这不是放置代码的最佳位置 如果我可以在我的代码中执行如下所示的操作 我
  • 是什么让 React 库需要 preact-compat?

    我注意到某些图书馆 例如classnames在 Preact 中很容易获得 但其他人喜欢styled components要求preact compat 是什么使得 React 库在 preact 中不受本机支持而需要使用 preact c
  • 函数中返回向量后清除内存

    我有一个函数 可以在其中处理和存储大量数据 然后将结果作为类向量返回 该函数中存储的数据量巨大 我想在该函数完成工作后清除该函数的存储内存 是否有必要这样做 该函数是否自动清除内存 或者我应该通过某些函数清除内存 Update vector
  • 需要将 git 分支重置为原始版本

    我不小心在一个本来不应该在的分支上工作了一段时间 所以我从它的分支上给它起了适当的名字 现在我想将我不应该进入的分支覆盖到原始版本 github 是否有捷径可寻 我尝试删除分支 然后重置跟踪分支 但它只是给了我再次正在处理的版本 如果你还没
  • 根据给定索引和元素数量的列表创建子列表。序言

    我正在尝试解决一个简单的序言问题 但我无法解决它 从列表中 需要创建一个给定索引 I 的子列表 然后从 I 中创建一个给定为 N 的下一个元素 如果索引大于列表长度 我将使子列表为空 如果 N 元素数量 大于列表中的其余元素 我将获得从 I