scheme - 如何在 Racket 中获取此代码以仅返回非重复项目?
问题描述
代码是这样工作的,我传递了几个列表,它只返回一个列表。我想要它做的是在加入列表中的元素后,它会删除重复的元素。为了更清楚:
代码是这样工作的:
> (koo '(p x k c l) '(l x y c) '(x k))
'(p x k c l l x y c x k)
我希望他像这样回到我身边:
> (koo '(p x k c l) '(l x y c) '(x k))
'(p y )
这里的代码:
(define (koo . c)
(if (null? c)
empty
(concatenate1 (first c)
(apply xor* (rest c)))))
(define (concatenate1 l1 l2)
(if (null? l1)
l2
(cons (first l1) (concatenate1 (rest l1) l2))))
解决方案
仅使用基本racket
功能的效率不高的版本:
(define (unique-elements lst)
(let ((dup (check-duplicates lst)))
(if dup
(unique-elements (remove* (list dup) lst))
lst)))
(define (xor* . lol) (unique-elements (append* lol)))
查找第一个重复元素,如果有,则从列表中删除该元素的所有实例,并重复直到没有重复元素。
推荐阅读
- javascript - Storybook webpack 绝对导入
- node.js - azure 上的 Nodejs:服务器未在第一个请求之前启动
- algorithm - LCS 的蛮力方法及其时间复杂度 [O(m*n)!?]
- c# - Button-Color 仅在完成 Paint-Method 后更新
- ssl-certificate - 忽略证书错误 + 无头 puppeteer + 谷歌云
- android - 如何在我的输入搜索开始的sqlite句子中找到单词?
- vue.js - 如何直接注册组件 vuetify-date-range picker ?无法获取自定义元素
- php - 在 WooCommerce 中隐藏未登录用户的特定产品
- javascript - 清除 Javascript 画布上的文本
- java - 在 Java Spring-Boot 上启动 ApplicationContext 时出错