附加!在计划中?

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(使用前将#替换为@)

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

  • 将字符串数据附加(添加)到 Android 应用程序中的 SD 卡文本文件

    这里只是简单说一下 虽然我的代码似乎可以使用写入内部或外部 SD 卡 存储中的 mytext txt 文件的标准技术将字符串数据等存储在新文件中 但对我来说 我的应用程序更有用通过重复允许用户重复该过程 例如用户输入和按钮保存 或关闭应用程
  • 将字符串附加到 IronScheme 中的现有文本文件

    我们正在尝试使用 IronScheme 构建一个日志文件 并且我们已经使用racket 为其编写了代码 它在球拍中工作正常 但 IronScheme 会抛出错误 这是我们目前所拥有的 define write to log lambda w
  • 如何检查for循环内的唯一性?

    有没有办法检查切片 映射是否存在值 我想为切片添加一个值only如果是的话not存在于切片中 这可行 但看起来很冗长 有一个更好的方法吗 orgSlice int 1 2 3 newSlice int newInt 2 newSlice a
  • 对方案中的列表进行排序

    如何编写一个排序算法 以升序返回列表 ex 1 3 5 2 9 回报 1 2 3 5 9 大多数Scheme 实现都附带一个对列表进行排序的过程 如果您的实现没有提供这一功能 那么为您提供一个并不困难 下面是快速排序算法的实现 gt def
  • python追加到json对象中的数组

    我在 python 中有以下 json 对象 jsonobj a b c var1 d var2 e 我想将键值元素附加到 e 中 但无法弄清楚它的语法 我尝试附加以下内容 但括号和引号的结果不正确 jsobj a b e append f
  • 方案中的延续传递风格?

    我遇到了这段代码在维基百科上 http en wikipedia org wiki Continuation passing style define pyth x y k x x lambda x2 y y lambda y2 x2 y2
  • 查找 lambda 表达式中的自由变量

    有谁知道如何找出 lambda 表达式中的自由变量 自由变量是不属于 lambda 参数的变量 我当前的方法 这对我毫无帮助 是简单地使用 car 和 cdr 来遍历表达式 我的主要问题是确定一个值是否是一个变量或者它是否是方案原语之一 有
  • 在Scheme中插入二叉树

    我想知道如何将列表中的元素插入二叉搜索树 我想知道为什么下面的代码不能按我的预期工作 输出是 4 1 5 13 6 我的下一个问题是对列表中的元素进行排序 但现在我只想插入它们 我的输出对于我所说的问题是否正确 我的代码如下 define
  • JQuery:帮助使用 .each() 和 .append() 将图片添加到 HTML

    需要修复的简单错误 我不知道出了什么问题 我需要将同一张图片附加到 HTML 中的多个 五个 div 由于某种原因 我的代码将同一张图片附加到每个 div 五次 更清楚地说 五个 div 中的每一个都需要一张图片 现在 这五个人每人都有五张
  • 经验丰富的计划者的 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 允许您在调用堆栈中存储值 您可以使用它来
  • jQuery 每个都返回 [object Object]

    我的问题是 html 变量返回如下所示的内容 object Object object Object object Object object Object object Object 而不是元素 我应该做什么不同的事情 var html
  • 如何解释方案表达式 '(a 'b)

    a b 给出答案 a b 当 a 没有绑定 未加引号 时 这是如何工作的 这就是我们计算表达式时发生的情况 a b gt a b The quote 是简写quote http docs racket lang org guide quot
  • Scheme/Lisp 嵌套循环和递归

    我正在尝试解决方案中的一个问题 该问题要求我使用嵌套循环或嵌套递归 例如我有两个列表 我必须检查它们的笛卡尔积的条件 解决这些类型问题的最佳方法是什么 有关如何简化这些类型的函数的任何指示吗 I ll elaborate a bit sin
  • 使用map或reduce或filter,在Scheme中,计算列表中有多少个元素[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 number length 1 1 0 1 0 0 这假设返回 6 我知道如何使用长度并找到它 但我不知道如何在没有长度的情况下使用映射或过
  • 将元素追加到 Angular QueryList

    有没有办法将新元素追加到 QueryList 中 例如 我有一个像这样的查询列表 ContentChildren SysColumn syscolumns QueryList
  • 方案中的多维向量?

    我之前问过一个关于方案中数组的问题 结果它们被称为向量 但在其他方面基本上与您期望的相同 有没有一种简单的方法可以在 PLT 方案中处理多维 arrays 向量 出于我的目的 我想要一个名为make multid vector或者其他的东西
  • jquery 动态 iframe - !document.write 和 IE 问题

    为什么这在所有浏览器中都有效 除了 IE var iframe var doc iframe contents doc find head append 但是 如果我在 document write 中使用非 jquery 对象 它在 IE
  • 从when语句内的函数返回

    我想做的就是使用 when 语句返回一个值 我想要以下功能 if x return y 我正在尝试使用 when x y 但是when语句并没有以退出函数并返回y的方式进行计算 它只是愉快地继续下一行 有没有办法做到这一点而不需要制作一个看
  • 为什么Racket中foldl的定义方式很奇怪?

    在 Haskell 中 与许多其他函数式语言一样 函数foldl被定义为 例如 foldl 0 1 2 3 4 10 这没关系 因为foldl 0 1 2 3 4 根据定义 0 1 2 3 4 但是 在 球拍 中 foldl 0 1 2 3

随机推荐

  • 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 换句话说 破坏性地改变列表 我对实际代码并不感兴趣 而是对答案感兴趣 而是对将列表作为函数 或向量或字