方案尾递归

2024-01-15

我正在尝试创建一个方案尾递归函数 flatten-tl-rec 来展平嵌套列表列表。

(define flatten-tl-rec
  (lambda (xs)
    (letrec ([flatten-tl-rec-acc
              (lambda (xs acc)
                (cond ((empty? xs) acc)
                      ((list? (first xs)) (flatten-tl-rec-acc (rest xs) (append (flatten-tl-rec-acc (first xs) '()) acc)))
                      (else (flatten-tl-rec-acc (rest xs) (cons (first xs) acc))))
                )])
      (flatten-tl-rec-acc xs '()))))

(flatten-tl-rec '(1 2 3 (4 5 6) ((7 8 9) 10 (11 (12 13))))) 

但我越来越(13 12 11 10 9 8 7 6 5 4 3 2 1)代替(1 2 3 4 5 6 7 8 9 10 11 12 13)。 这里出了什么问题?


您正在列表错误的末尾累积元素。您可以将它们附加到列表的正确末尾:

(define flatten-tl-rec
  (lambda (xs)
    (letrec ([flatten-tl-rec-acc
              (lambda (xs acc)
                (cond ((empty? xs) acc)
                      ((list? (first xs))
                       (flatten-tl-rec-acc
                        (rest xs)
                        (append acc (flatten-tl-rec-acc (first xs) '()))))
                      (else (flatten-tl-rec-acc
                             (rest xs)
                             (append acc (list (first xs)))))))])
      (flatten-tl-rec-acc xs '()))))

...或者简单地反转最后的列表:

(define flatten-tl-rec
  (lambda (xs)
    (letrec ([flatten-tl-rec-acc
              (lambda (xs acc)
                (cond ((empty? xs) acc)
                      ((list? (first xs))
                       (flatten-tl-rec-acc
                        (rest xs)
                        (append (flatten-tl-rec-acc (first xs) '()) acc)))
                      (else (flatten-tl-rec-acc
                             (rest xs)
                             (cons (first xs) acc)))))])
      (reverse (flatten-tl-rec-acc xs '())))))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

方案尾递归 的相关文章

  • c中使用递归的strlen函数

    我对递归主题很陌生 我一直在尝试使用递归编写 strlen 函数 这就是我尝试过的 int strlen char str int i if str i 0 return i 1 return strlen str i 我尝试了一些非常相似
  • 为什么Python有最大递归深度?

    Python有最大递归深度 但没有最大迭代深度 为什么递归受到限制 把递归当成迭代来对待 而不限制递归调用的次数不是更自然吗 我只想说这个问题的根源来自于尝试实现流 参见这个问题 https stackoverflow com questi
  • 跟踪 C++ 中递归函数被调用的次数

    我正在尝试编写一个程序 该程序具有一个参数是字符串向量的函数 我想在该函数上使用递归 但每次调用该函数时 我想更改参数 例如 fun stringArray i 其中 i 是调用该函数的次数 因此 以更简单的方式 如下所示 但我需要跟踪函数
  • Java中的递归排列生成错误结果

    问题是生成字典排列 起初 我的代码是这样的 public class Problem24 public static void main String args permutation 123 public static void perm
  • NodeJS 在目录中递归地哈希文件

    我能够实现目录中的递归文件遍历 即探索目录中的所有子目录和文件 为此我使用了answer https stackoverflow com questions 5827612 node js fs readdir recursive dire
  • 在Racket中将结构递归转化为累积递归

    我有一些代码来查找最大高度并将其替换为关联的名称 身高和姓名有单独的列表 每个列表的长度相同且非空 我可以使用结构递归来解决这个问题 但必须将其更改为累积递归 而且我不确定如何做到这一点 我见过的所有例子都让我困惑 有人能够将代码变成使用累
  • MySQL 最佳实践:SELECT 子递归尽可能提高性能?

    我想选择一个根项目及其子项 使其性能尽可能高 我更喜欢使用嵌套集模型 但这次表结构遵循邻接模型 有关嵌套集和邻接模型的更多信息 http mikehillyer com articles managing hierarchical data
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • Emacs Lisp 可以将 lambda 形式分配给像Scheme 这样的变量吗?

    在研究 Emacs Lisp 的符号单元时 我发现像这样的示例函数 defun a rest x x 我可以打电话 symbol function a 返回 lambda rest x x 如果我愿意的话我可以使用它 gt lambda r
  • 这个对自身单位的列表理解是如何工作的?

    在 haskell IRC 频道中有人问 是否有一种简洁的方法来定义一个列表 其中第 n 个条目是之前所有条目的平方和 我认为这听起来像一个有趣的谜题 递归定义无限列表是我真正需要练习的事情之一 所以我启动了 GHCi 并开始尝试递归定义
  • Java递归方法求阶乘返回负输出[重复]

    这个问题在这里已经有答案了 我知道这是溢出 但问题是 20 是相对较小的数字 这不应该发生 对吧 有没有更好的方法来查找大数 例如 1000 的阶乘 而不会得到这种奇怪的结果 public class RecursiveFunctionsE
  • 如何将Scheme中的函数应用于另一个函数返回的参数列表?

    假设有两个函数 f 和 v 进一步假设 v 返回长度为 n 的列表 并且 f 需要恰好 n 个参数 我正在Scheme中寻找正确的语法 以将f应用于v返回的列表 如果我使用语法 f v v arguments 然后我收到一个关于 f 需要
  • 来自 JSON 的 Angular 8 动态表单

    我正在尝试从 JSON 模式递归生成动态表单 但我正在努力解决找不到表单控件的问题 这是代码示例 我收到这个错误 错误错误 找不到名称为 createdAt 的控件 我尝试了不同的方法 但仍然存在问题 我知道我错过了一些东西 所以请帮忙 任
  • 理解基本递归

    public static void main String args System out println factorial 5 public int factorial int n if n lt 1 return 1 else re
  • 函数式 Scala 中的选择排序

    我正在学习 Scala 编程 并编写了选择排序算法的快速实现 然而 由于我对函数式编程还不太了解 所以在转换为更 Scala 风格时遇到了困难 对于 Scala 程序员来说 如何使用 Lists 和 vals 来做到这一点 而不是回到我的命
  • 如何使用Emacs运行方案?

    我跟着这个tutorial http jeffcjensen net scheme 并成功安装了Emacs STk Quack 问题是我怎样才能像在 Racket 中那样加载我的程序 在 Racket 中 我可以在上方窗口中编辑代码 输入一
  • 返回列表的前 n 个

    如何返回第一个n列表的元素 这是我所拥有的 define returns lambda list n cond null list 0 n n 1 car list cons car list returns cdr list n else
  • 在 Pari-GP 中嵌套特定递归

    每个人 我最初在 Stackexchange 上发布了类似的问题 它已移至此处 可以在链接中找到 在 Matlab 中声明函数递归序列 https stackoverflow com questions 67146061 declaring
  • SQL - 每个级别都有记录的递归树层次结构

    尝试使用 SAS 据我所知 不支持WITH RECURSIVE 在 SQL 中创建经典的层次结构树 这是现有表中的简化数据结构 USER ID SUPERVISOR ID 因此 要构建层次结构 您只需递归连接 x 次即可获取您要查找的数据
  • 包装一个采用 std::function 的函数,以便传递采用更多参数的函数

    Problem 我有一个函数double subs std function

随机推荐

  • Google Play 游戏服务无法登录

    几天来我一直在为这个问题而头撞墙 尽管阅读了许多描述 GPS 登录失败问题 解决方案的帖子 但我一直无法找到问题的解决方案 简而言之 我正在使用 LibGDX 框架在 Android Studio 中开发一款游戏 并添加了 BaseGame
  • IE10 上触摸点之间的间距

    我正在开发插件 flot touch js 它在 webkit 浏览器的图表上添加触摸交互性 平移和缩放 我也想让它在 IE10 上运行 但是我不知道如何恢复触摸点之间的空间 我需要这个来计算比例 在 webkit 浏览器上 我们可以使用这
  • iOS 检查 WiFi 辅助是否已启用

    我正在尝试检查 WiFi 辅助是否已启用 当我连接到接入点获取一些数据时遇到问题 当我的连接状况不佳时 我的蜂窝数据会被使用并干扰我的接入点 有什么方法可以检查该选项是否启用 好吧 我想我能帮上一点忙 你需要check SCNetworkR
  • 路由到 Laravel 5 子文件夹中的控制器

    这是我的routes php Route get Panel PanelController index 这是我的文件夹 Http Controllers Panel PanelController php 这是我的控制器 namespac
  • 如何使用 Google Assist API 实现 Google Assistant

    我一直在查看并阅读有关 Google Now on Tap 的内容 来自http developer android com training articles assistant html http developer android c
  • 如何从元数据查找 OData 版本

    我可以访问 OData 服务 现在我需要找到该服务的 OData 版本 metadata 中有版本属性 但我不知道该选哪一个 我需要从
  • 如何保留 HTML
     标记中包含的文本的空白缩进,不包括文档中 
     标记的当前缩进级别?                
                

    我正在尝试在网站上显示我的代码 但在正确保留空格缩进方面遇到问题 例如给出以下代码片段 Here is my code pre def some funtion return Hello World end pre 这在浏览器中显示为 He
  • 如何在pyspark中将数据分成组

    我需要在时间序列数据中找到组 数据样本 我需要输出列group基于value and day 我尝试过使用 lag lead 和 row number 但最终一无所获 似乎每次值发生变化时您都想增加该组 如果是这样 这就是一种缺口和岛屿问题
  • 如何修复类型“Future”不是“String”类型的子类型 Flutter

    颤振初学者在这里 我收到此错误 type Future
  • Python 中的函数重载:缺失 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions As 函数重载 http web a
  • 平移/旋转后重置 CSS 变换原点

    在 CSS 中翻译元素后 其变换原点仍保留在其原始位置 在这种特殊情况下 我希望变换原点为stay在所有变换期间相对于元素居中 我希望起源是这样的follow被变换的元素 我知道关于transform origin属性 但这似乎需要我每次手
  • 为什么我在设置 LibGDX 时没有通用补间引擎

    接下来是关于设置 LibGDX 项目的教程 教程说在第三方部分应该有一个通用 Tween 引擎 地雷不显示 有什么办法可以显示吗 我需要下载什么 提前致谢 Gdx setup new ui jar 不附带 TweenEngine 库 还有另
  • z-index 不适用于绝对位置

    如果你看看我的测试网站here http www hosting mate com marinebuoysaustralia 您将看到 向下滚动 按钮与我的所有内容重叠 无论我输入什么 z index 有办法解决这个问题吗 我意识到我的立场
  • 在 VBscript 中使用命令行参数

    如何在 VBscript 中传递和访问命令行参数 Set args Wscript Arguments For Each arg In args Wscript Echo arg Next 从命令提示符运行脚本 如下所示 CSCRIPT M
  • 如何将 Spring Boot 与 MySQL 数据库和 JPA 结合使用?

    我想使用 MySQL 和 JPA 设置 Spring Boot 为此我创建 Person package domain import javax persistence Entity Table name person public cla
  • 什么是生成单元测试框架?

    在 stackoverflow 上我遇到了 mbunit 在其页面上 它指出 mbunit 是一个生成单元测试框架 但我找不到任何描述生成单元测试框架是什么的地方 我希望得到 一个定义 有关生成单元测试框架是什么和不是什么的文章的链接 生成
  • 如何在 C 程序(在 Linux 上)中接收使用 sigqueue 发送的信号?

    如何在 C 程序 在 Linux 上 中接收使用 sigqueue 发送的信号 如果只是使用kill来发送信号 我只需添加一个带有类似这样的接收器 signal SIGUSR1 sigusr1 指向一个像这样的简单函数 void sigus
  • 更新到 Hibernate 5 后无法访问 TransactionManager 或 UserTransaction

    我刚刚从 Hibernate 4 2 19 更新到 Hibernate 5 1 2 当然 这并不是说事情没有按计划进行 在解决了几个问题 其中 JOIN FETCH 必须替换为 JOIN 之后 我现在遇到了下一个问题 org springf
  • 在 Linux 上用 C 语言使用 RAW Socket 发送组播

    我编写了一个在 Ubuntu LTE 上运行的程序 该程序应该使用原始套接字将多播消息发送到 239 255 25 25 端口 5004 为了接收多播 我使用 UDP 套接字 通过套接字发送的数据是使用wireshark从rtp流中捕获的
  • 方案尾递归

    我正在尝试创建一个方案尾递归函数 flatten tl rec 来展平嵌套列表列表 define flatten tl rec lambda xs letrec flatten tl rec acc lambda xs acc cond e