删除嵌套重复项的方案

2024-06-21

所以我在方案中编程并创建了一个删除重复项的函数,但它不适用于嵌套。我真的想不出一个好方法来做到这一点,有没有办法修改我当前的代码并简单地使其与嵌套一起工作?清单?

这是我的代码

(define (duplicates L)
  (cond ((null? L)
         '())
        ((member (car L) (cdr L))
         (duplicates (cdr L)))
        (else
         (cons (car L) (duplicates (cdr L))))))

因此,您的过程会跳过列表其余部分中存在的元素,以便(duplicates '(b a b))变成(a b)并不是(b a)。它适用于平面列表,但在树中,该列表中可能没有第一个元素,而是一个列表。保留第一次出现并将未来元素列入黑名单要容易得多。由于您已标记,以下代码使用哈希racket。在没有哈希的情况下执行此操作需要多值返回或突变。

(define (remove-duplicates lst)
  (define seen (make-hasheqv))
  (define (ins val)
    (hash-set! seen val #t)
    val)
  (let aux ((lst lst))
    (cond ((null? lst) lst)
          ((not (pair? lst)) (if (hash-has-key? seen lst) '() (ins lst)))
          ((pair? (car lst)) (let ((a (aux (car lst))))
                               (if (null? a) ; if the only element is elmininated
                                   (aux (cdr lst))
                                   (cons a (aux (cdr lst))))))
          ((hash-has-key? seen (car lst)) (aux (cdr lst)))
          (else (cons (ins (car lst)) ; NB! order of evaluation in Racket is left to right but not in Scheme! 
                      (aux (cdr lst)))))))

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

删除嵌套重复项的方案 的相关文章

  • Scheme 和 Racket 中嵌套引号的行为

    在 Racket 中编写函数时 我不小心在符号前面放了两个单引号而不是一个 即我不小心写了 a 并发现嵌套引号的一些行为看起来很奇怪 我正在使用 DrRacket 并使用 Racket lang 和 R5RS lang 对此进行了测试 wr
  • 使用map或reduce或filter,在Scheme中,计算列表中有多少个元素[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 number length 1 1 0 1 0 0 这假设返回 6 我知道如何使用长度并找到它 但我不知道如何在没有长度的情况下使用映射或过
  • 在Racket中将结构递归转化为累积递归

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

    我有一个搜索栏 您可以在其中输入员工姓名 它应该根据过滤器返回姓名 我有一个嵌套的 JSON 对象 如下所示 我需要深入了解该对象以访问数组中的员工姓名 您可以看到我尝试实现的多个选项 它们已被注释掉 我的问题是代码没有过滤名称并返回所有名
  • 如何让球拍不打印?

    我正在 Racket 中编写一个程序 我正在使用它运行racket foo rkt 这是可行的 除了程序顶层每个表达式的结果都会被打印 即使没有调用打印函数 就好像程序是逐行输入到 REPL 中的 但在这种情况下 我根本不尝试使用 REPL
  • 为什么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
  • 如何将Scheme中的函数应用于另一个函数返回的参数列表?

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

    我真的不知道如何找出嵌套循环的结果 例如 在下面的伪代码中 我无法弄清楚执行结束时会给出什么 如果有人给我一个简单的解决方案 我会很高兴 r lt 0 for i lt 1 to n do for j lt 1 to i do for k
  • 可扩展的宏定义

    灵感来自于评论区 https stackoverflow com questions 23879410 is it possible to extend a function lambda macro in scheme 23879575
  • 返回列表的前 n 个

    如何返回第一个n列表的元素 这是我所拥有的 define returns lambda list n cond null list 0 n n 1 car list cons car list returns cdr list n else
  • Python 宏:用例?

    如果 Python 有一个类似于 Lisp Scheme 的宏工具 比如元Python https code google com p metapython 你会如何使用它 如果您是一名 Lisp Scheme 程序员 您会使用宏来做什么
  • 忽略 Racket 中的多个返回值

    在 Racket 中 可以通过执行以下操作从函数返回多个值 define foo values 1 2 3 然后我们可以通过这样做来绑定它们 define values one two three foo Now one一定会1 two t
  • 运行时嵌套循环的数量

    我正在尝试输出一组整数从 1 到 max 的所有可能的唯一整数组合 因此 对于 3 个整数且最多 4 个整数 我会得到 123 124 134 234 我正在使用嵌套的 for 循环来执行此操作 但我希望允许用户在运行时输入整数的数量 现在
  • 中断/退出嵌套在 vb.net 中

    如何摆脱 vb net 中的嵌套 for 或循环 我尝试使用 exit for 但它只跳转或中断了一个 for 循环 我怎样才能做到以下几点 for each item in itemList for each item1 in itemL
  • Racket 与Scheme 有何不同?

    Racket 是Scheme 的后代 Racket 与 R6RS 有何不同 它添加了什么 删除了什么 或者只是有所不同 我知道 Racket 不仅仅是一种语言 它还是一个语言平台 但我指的是主要的 Racket 方言 Racket 最终基于
  • 如何在 Visual Studio Code 上运行 Scheme?

    我想知道如何在 Visual Studio Code 上运行简单的方案代码 我已经安装了一个名为 Scheme 的扩展 但下一步是什么 我没有找到有关如何运行代码或开发人员联系方式的扩展的任何详细信息 现在在 VSCode 上编译Schem
  • 如何在 Lilypond 中缩写“相同音符高八度的音符,带括号”?

    目前我写lilypond questions tagged lilypond代码如下所示 version 2 14 2 P parenthesize relative c clef bass
  • 连续传递风格的中间值和返回值

    我来自 OOP 非功能性背景 因此我无法完全可视化有关以下方面的几个在线示例连续传递 https en wikipedia org wiki Continuation passing style 另外 像Scheme这样的函数式语言不必指定
  • 程序解释期间高效的增量哈希计算

    我想写一个递归记忆Scheme解释器 在求值过程中的任何时刻 解释器都应该能够检测到它何时接收到之前见过的一对表达式和环境作为参数 简单记忆eval and apply效率低下 每次调用时都需要在哈希表中查找参数eval apply 这需要
  • 为什么“let”不能用于命名内部递归过程?

    考虑计算阶乘函数的以下实现 1 define fac tail lambda n define fac tail helper lambda n ac if 0 n ac fac tail helper n 1 n ac fac tail

随机推荐

  • 将 API 数据存储到 DataFrame 中

    我正在运行 Python 脚本来从 Interactive Brokers API 收集金融市场数据 连接到API后 终端打印出请求的历史数据 如何将数据保存到数据帧中而不是在终端中流式传输 from ibapi wrapper impor
  • Chrome SuppressDifferentOriginSubframeJSDialogs 使用 JS 设置覆盖?

    Chrome 开发团队显然刚刚推出了一项名为 SuppressDifferentOriginSubframeJSDialogs 的新 功能 这使得默认情况下不会显示来自与父级不同域上的 iFrame 的警报 确认框 https www ch
  • Github 操作错误:bash:第 3 行:npm:找不到命令

    我正在尝试通过 ssh 将 Nodejs 应用程序从 github 部署到远程 ubuntu 服务器 这是我的 main yml name Node Github CI on push branches master jobs deploy
  • CodeIgniter PHP 模型访问“无法找到您指定的模型”

    我一直在尝试为我正在构建的这个网站加载一些模型 但不知道什么原因 会带来如下错误 An Error Was Encountered Unable to locate the model you have specified logon mo
  • 从核心转储中获取堆栈跟踪

    如何从核心转储文件中获取堆栈跟踪 该文件大约 14 mb 是在我的应用程序退出并显示 分段错误 后生成的 我使用的是红帽 5 5 gdb usr bin myapp binary corefile 然后 使用以下之一 gdb bt gdb
  • PHP $_FILES 多个文件上传问题

    我在 PHP 中上传多个文件时遇到一个小问题 我有这个 html 表单
  • 有没有办法强制 git merge 始终使用外部合并工具?

    有没有一种方法可以配置 git merge 使冲突解决始终通过外部合并工具进行 我正在编写语义合并的配置 并且存在这样的情况 git 错误地处理了这些情况 但可以通过语义合并正确解决 两个开发人员在同一文件的两个不同位置添加了相同的方法 问
  • ngModel.$parsers 忽略 ng-model 值末尾的空格

    我有这样的指令 directive noWhitespace parse function parse return restrict A require ngModel link function scope element attrs
  • ImageButton 拉伸背景图像

    我正在尝试创建一个没有边框的 ImageButton 但遇到了图像按钮大小的问题 我使用 Eclipse ADT 将 ImageButton 拖到布局中并选择背景图像 图像按钮显示如下 正如您所看到的 背景图像和图像按钮周边之间有一个边框
  • 使用 Web 服务时如何将 java.sql.Date 序列化为 Long?

    我有一个简单的 Web 服务方法 它返回一个简单的 java 类作为返回值 WebMethod public SimpleClass myMethod XmlRootElement public class SimpleClass XmlE
  • 如何获得 UICollectionView 的矩形

    我想在 UICollectionView 中找到节标题的框架 我对 UITableView 也有类似的情况 为此 我能够通过执行以下操作来获得其正确性 CGRect rect self tableView rectForHeaderInSe
  • LWG1203“更有用的右值流插入”是否追溯应用于 C++11 或 C++20?

    灵感来自我最近的问题中的讨论 https stackoverflow com questions 69320918 why does taking istream to a temporary stringstream work but n
  • Android 依赖项:apklib 与 aar 文件

    据我了解 apklib包含代码 共享资源Maven aar文件由以下人员分发Gradle The aar与 apklib 的主要区别在于 类被编译并包含在 aar 根目录下的classes jar 中 然而apklib不能包含已编译的类文件
  • 如何清理 Eclipse“运行配置”

    我在 Eclipse 的 Window gt Prefs gt Java gt Installed JREs gt Default VM Arguments 中设置了 java 运行时选项 由于这个设置足以满足我所有的需求main 入口点
  • 如何在 Swift 中使用函数数组

    我已经阅读了我可以在这里找到的所有关于函数数组的帖子 太棒了 你能做到 我估计 但没有一篇文章实际上展示了如何使用它们 至少不是我想要做的 这就是我想要的 它们都可以采用相同的参数 但这不是必需的 这篇文章很接近 将允许我循环执行每个函数
  • 为什么我在 Safari 开发者工具中看不到预检(方法:选项)xhr 请求?

    由于我不明白的原因 Safari 无法 间歇性但持续地 连接到我们 QA 基础设施上的 Rails 应用程序 静态前端和 API 后端 我将就此写另一个问题 目前 让我感到困惑的一件事是 Safari 一般来说 似乎从未显示其他浏览器 Ch
  • iOS 中第一响应者的正式定义是什么?

    据我所知 第一响应者对象是根据输入活动等接收回调信号 并且它将沿着链向上冒泡 直到找到愿意处理它的响应者 但更正式地说 第一响应者的范围是什么 例如 它是应用程序范围的响应程序吗 似乎作为第一响应者只是说这个特定的对象将收到交互通知 其他响
  • 从命令行创建 MongoDB 用户

    我已经建立了一个 MongoDB 数据库admin仅具有管理权限的用户 无权读取或写入数据库 我现在想做的是 添加新数据库 并向该数据库添加一个新用户 并且 我需要从命令行执行此操作 所以我尝试 mongo admin u admin p
  • 是否可以将 Flutter 应用注册为 Android Intent Filter 并处理传入 Intents?

    人们可以使用 Flutter 应用程序中的 Intent 启动另一个 Activity https github com flutter flutter blob master examples widgets launch url dar
  • 删除嵌套重复项的方案

    所以我在方案中编程并创建了一个删除重复项的函数 但它不适用于嵌套 我真的想不出一个好方法来做到这一点 有没有办法修改我当前的代码并简单地使其与嵌套一起工作 清单 这是我的代码 define duplicates L cond null L