附加!在计划中?

2024-02-26

我目前正在学习 R5RS 方案(来自 PocketScheme),我发现我可以使用内置于方案的某些变体(但不是全部)中的函数:Append!

换句话说 - 破坏性地改变列表。

我对实际代码并不感兴趣,而是对答案感兴趣,而是对将列表作为函数(或向量或字符串)传递然后对其进行变异的过程感兴趣。

例子:

(define (append! lst var)
    (cons (lst var))
)

当我使用上述方法时,我必须做类似的事情(define list (append! foo (bar))我想要一些更通用的东西。


尽管允许突变,但在Scheme 中强烈建议不要进行突变。 PLT 甚至删除了set-car! and set-cdr!(尽管他们将它们“替换”为set-mcar! and set-mcdr!)。然而,一个规范append!出现在SRFI-1 http://srfi.schemers.org/srfi-1/srfi-1.html#append!. This append!与你的有点不同。在 SRFI 中,实施may,但不是required修改 cons 单元格以附加列表。

如果你想拥有一个append!那是保证要更改要附加的列表的结构,您可能必须自己编写。这并不难:

(define (my-append! a b)
  (if (null? (cdr a))
      (set-cdr! a b)
      (my-append! (cdr a) b)))

为了保持定义简单,这里没有错误检查,但很明显,您需要传入一个长度至少为 1 的列表,如下所示a,以及(最好)一个(任意长度的)列表b。原因a长度必须至少为 1 因为你不能set-cdr!在一个空列表上。

既然您对它的工作原理感兴趣,我会看看是否可以解释一下。基本上,我们要做的就是沿着列表向下走a直到我们到达最后cons对,即(<last element> . null)。所以我们首先看看是否a通过检查已经是列表中的最后一个元素null in the cdr。如果是的话,我们使用set-cdr!将其设置到我们要附加的列表中,然后就完成了。如果没有,我们必须打电话my-append! on the cdr of a。每次我们这样做,我们就离结局更近了a。由于这是一个变异操作,我们不会返回任何内容,因此我们不需要担心将修改后的列表形成为返回值。

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

附加!在计划中? 的相关文章

  • 经验丰富的计划者的 get-first、get-next 和 waddle 函数

    define get first lambda l call with current continuation lambda here set leave here waddle l leave quote define get firs
  • 访问Scheme中的调用堆栈深度

    为了演示尾递归的有效性 我想要一种在Scheme中动态访问调用堆栈深度的方法 有没有办法做到这一点 如果没有 有没有办法在其他主要函数语言 OCaml Haskell 等 中做到这一点 Racket 允许您在调用堆栈中存储值 您可以使用它来
  • 方案:为什么内部定义比外部定义快?

    我尝试运行下面的程序 define odd internal x define even x if zero x t odd internal sub1 x if zero x f even sub1 x define odd extern
  • 如何在 RichTextBox 中附加 RTF 文本,Win C#

    我在 Win C 中有一个 RichTextBox 我想在 RichTextBox 中附加一些具有粗体效果的新文本 那么我该怎么做呢 I tried string str richTextBox Rtf my logic str rtf1
  • 用于基于 window.location.href 的条件 URL 附加或重定向的 Javascript

    我正在尝试制作一个书签 单击该书签时将检查当前选项卡 窗口的 URL 以查看它是否包含 char1 和 或 char2 给定字符 如果两个字符都存在 它将重定向到另一个 URL 对于另外两个字符 它将分别附加当前 URL 我相信一定有一种比
  • jQuery 每个都返回 [object Object]

    我的问题是 html 变量返回如下所示的内容 object Object object Object object Object object Object object Object 而不是元素 我应该做什么不同的事情 var html
  • Racket 中的“match”可以具有带有来自外部作用域的变量的模式吗?

    考虑以下示例 lang racket match cat doge a b match b a t f Not a pair 如果我想匹配头部和尾部相同的对 我可能会这样写 但这不起作用 因为第二个a被绑定为一个新变量 并且匹配任何内容 是
  • 如何将 HashMap> 存储在列表中?

    我的哈希图将字符串存储为键 将数组列表存储为值 现在 我需要将其嵌入到列表中 也就是说 它将采用以下形式 List
  • hadoop2.2.0追加文件发生AlreadyBeingCreatedException

    我遇到了一个关于hadoop2 2 0追加操作的问题 我通过 HDFS java API 将一些字节附加到 hdfs 文件 首先 如果在附加操作之前文件不存在 我将创建目标文件 代码如下 String fileUri hdfs hadoop
  • Lisp 中的 (定义 (平均 ....))

    我只是在玩scheme lisp 并正在考虑如何纠正我自己的定义average 我不确定如何做一些我认为需要的事情 定义一个接受任意数量参数的过程 计算这些参数 将参数列表传递给 以将它们加在一起 有人有定义的例子吗average 我似乎对
  • Android - 如何合并两个视频

    基本上 我正在寻找一种将两个 mp4 视频文件 在 SD 卡上 组合在一起的方法 更像是在第一个视频的末尾附加第二个视频 我进行了很多搜索 但找不到合适的解决方案 好吧 我根本找不到任何解决方案 所以我的问题是 是否有一个库可以组合 并可能
  • jquery 动态 iframe - !document.write 和 IE 问题

    为什么这在所有浏览器中都有效 除了 IE var iframe var doc iframe contents doc find head append 但是 如果我在 document write 中使用非 jquery 对象 它在 IE
  • 为什么《小阴谋家》中的所有 lambda 表达式都是如此?

    在从 SICP 学习了一些计划之后 我开始阅读 小计划 我觉得这本书很有趣 并且已经完成了大约四分之一 我注意到我可以在不使用 lambda 的情况下编写许多 大多数 全部 解决方案 而 The Little Scheduleralways
  • 如何在mit-scheme中正确使用(读取)?

    我在文档和 Rosetta 代码中读到 read 用于从控制台获取输入 所以我写了这段代码来检查这一点 display read 1 但 mit scheme 从不要求用户输入 程序就会终止 为什么会这样呢 在 REPL 中 display
  • 在Python中将列表附加到自身[重复]

    这个问题在这里已经有答案了 我想将一个列表附加到自身 我认为这会起作用 x 1 2 y x extend x print y 我想回来 1 2 1 2 但我得到的只是内置的None 我究竟做错了什么 我正在使用Python v2 6 x e
  • 如何使用 DrRacket 遵循 SimplyScheme 书籍

    我希望能够操纵句子 以便我可以将它们作为输入并根据单个字母等内容返回输出 例如 ends e 命令将返回所有以 e 结尾的单词 ends e only the good die young gt the die 不幸的是 e 是一个字符串
  • 从 python 数据帧插入 DB2 表

    我正在使用 python 库 IBM DB 通过它我可以建立连接并将表读入数据帧 当从 python 中的数据帧源写入 DB2 表 INSERT 查询 时 就会出现问题 下面是连接的示例代码 但有人可以帮助我如何将数据帧中的所有记录插入到
  • 交替附加两个列表中的元素

    我有三个包含元素的列表 a 0 1 2 3 b 5 6 7 8 c 我想附加元素a and b into c to get c 0 1 5 6 2 3 7 8 基本做法 gt gt gt a 0 1 2 3 gt gt gt b 5 6 7
  • 如何在 Javascript 中附加或连接字符串?

    所以我试图添加到一个字符串 但它显示为空 var DNA TAG var mRNA m RNA function check a b string if string a mRNA concat b function m RNA conso
  • 方案符号中区分大小写

    据我所知 Scheme 中的符号不 区分大小写 即 eq Hello hello 评估为 t 因为两者都用符号表示 hello 并且scheme具有两个同名符号是同一个对象的属性 然而 这对我来说似乎并非如此 而且事情似乎区分大小写 无论我

随机推荐

  • Emacs 没有看到 Org-Mode 的新安装

    我已经从 emacs list packages 安装了 org mode 版本 8 2 1 我下载了最新版本 8 2 4 并将其放在 emacs d 中 并将以下内容添加到我的 emacs 中 add to list load path
  • 带 Cookie(或标头)的 VideoView

    我正在尝试使用 android widget VideoView 来流内容 我需要确保在使用 setVideoURI Uri 时 VideoView 将包含之前 HttpClient 调用中的 Cookie 我在源代码中看到有 setVid
  • 运行但不执行任何 Spark 应用程序的 Azure Databricks 集群的成本[已关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我一直在阅读 Azure Databricks定价详情 https azure microsoft com en us pricing
  • 使用 LESS mixin 添加供应商前缀

    我收到此混合的语法错误 vendors statement statement moz statement webkit statement 任何方法都可以做到这一点 或者混合变量必须位于 a 的右侧 从 Less v2 开始 你可以使用自
  • 资源文件中的最终变量

    我和一些人有一个活动final变量 我将它们的值 假设它们都是字符串 提取到资源文件中 问题 如果我直接在实例化时分配它们 如下所示 private final String PREFERENCE NAME getResources get
  • spring 将属性文件中的值传递给注释

    我有 spring 应用程序的 application properties 文件 其中包含一些简单的属性 queue my test q 在java代码中我需要将队列指定为 RabbitListener Component public
  • 使用 Subversion 合并两个分支修订

    我想合并 rev 10 和 HEAD rev 之间发生的所有更改http url of branch a http url of branch a并将它们应用到http url of branch b http url of branch
  • Rails i18n - 翻译带有链接的文本

    我想国际化如下所示的文本 已经注册了 Log in http example com 请注意 文本上有一个链接 在此示例中 它指向 google 实际上 它将指向我的应用程序log in path 我找到了两种方法来做到这一点 但没有一种看
  • 对于定点组合器 Y,什么是 \x.f(xx)

    对于 Y 组合子定理 For every function F there exists an X such that FX X 什么是F意思是这里 固定点是什么F x x 1 我的理解是x 1 x没有解决办法吗 对于下面的证明 For a
  • 检查 ArrayList 是否包含另一个 ArrayList 中的每个元素

    我在这里可能找不到一句简单的话 但这是我的问题 如何检查 ArrayList 是否包含另一个 ArrayList 中的所有对象 我正在寻找 如果存在的话 类似的东西 INCORRECT EXAMPLE if one contains two
  • 在 JavaScript 中创建 ISO 日期对象

    我设置了一个 mongo 数据库 在 mongoDb 中创建新的日期对象 创建 ISO 格式的日期对象 例如 ISODate 2012 07 14T00 00 00Z 我正在使用 node js 连接到 mongo 数据库并查询数据库 每当
  • NodeJS、OpenCV 和使用 Net Socket 的流图像

    我的最终目标是将视频从我的笔记本电脑流式传输到服务器 我正在尝试通过在笔记本电脑和服务器上使用 NodeJs 来完成此任务 我使用 OpenCV 库在笔记本电脑上捕获视频并将其保存为 jpg 文件 然后 我读取该文件并将其转换为 base6
  • 远程 ListView 在 Android 小部件上闪烁

    我在远程列表视图方面遇到了意外的麻烦问题 我的应用程序有一个简单的小部件 其中包括一个列表视图 如果列表视图的单元格高度为 1 并且列表视图位于滚动的开始处 则每次调用 datasetchanged 时它都会闪烁 闪烁 有趣的是 如果列表视
  • Yii2 日期比较验证

    我有如下所示的模型规则 但它不起作用 它总是显示错误消息 public function rules return start date end date date format gt php F d Y start date compar
  • 如何在 MATLAB 中对连接的点进行聚类?

    想象一下 我们有很多点 其中一些点连接在一起 我们想要将它们聚类 请看下图 如果我们有 连接矩阵 点 我们如何将它们聚类为两组 连接点组 ConnectivityMatrix 1 2 1 3 2 4 2 3 2 1 3 1 3 2 3 4
  • startMonitoringSignificantLocationChanges 和 startUpdatingLocation 如何相互影响?

    如果我打电话会发生什么startUpdatingLocation while startMonitoringSignificantLocationChanges在跑 重要的位置变化监控是否停止 如果我那么stopUpdatingLocati
  • JSON 字符串错误地映射到文本视图

    我有 3 个文本视图 我试图用 JSON Http 响应中的数据填充它们 但它们当前填充的是响应中的错误数据 由于某种原因 它没有解析字段并正确分配它们 看起来它只是用 JSON 响应中的数据开头填充每个文本视图 截屏 JSON HTTP
  • 如何添加 MSAccess 连接到 CodeIgniter 或 CakePHP?

    我正在尝试使用 Microsoft Access 数据库进行演示项目 我正在考虑在 CodeIgniter 或 CakePHP 中进行该项目 忽略使用 Microsoft Access 可能存在的愚蠢行为 我无法准确地弄清楚连接字符串如何与
  • 将多个单选按钮绑定到单个布尔值

    背景 我有一个包含三个布尔值的模型 public class PageDataModel public bool setting1 get set public bool setting2 get set public bool setti
  • 附加!在计划中?

    我目前正在学习 R5RS 方案 来自 PocketScheme 我发现我可以使用内置于方案的某些变体 但不是全部 中的函数 Append 换句话说 破坏性地改变列表 我对实际代码并不感兴趣 而是对答案感兴趣 而是对将列表作为函数 或向量或字