【问题标题】:drracket flip over the remove functiondrracket 翻转删除功能
【发布时间】:2014-11-26 08:08:57
【问题描述】:

我有 2 个列表

(define wholelist '(1 2 3 4 5 6 7 8 9 10))
(define list1 '(3 4 6 9 10))

(define (removelist list1 list2)
        (remove* list1 list2))

我想做的是,如果我

(define result1 (removelist list1 wholelist)
> '(1 2 5 7 8)

但我希望结果列表为

> '(3 4 6 9 10)

使用 remove* 函数。

有什么方法可以将我的 '(1 2 5 7 8) 结果翻转为 '(3 4 6 9 10)? 喜欢

(not (remove* list1 list2))

??????

非常感谢您的帮助!

还有,有没有办法在 cond 语句或函数中定义一个列表???

非常感谢!

【问题讨论】:

  • 您的列表始终是否保证按升序排列?如果是这样,有一个更快的解决方案(比 Óscar 的答案,它不需要对列表进行排序但速度较慢)。

标签: scheme racket


【解决方案1】:

在这种情况下,filter 将比remove* 更有用:我们想要获取wholelist 中的所有元素,它们也是list1members。试试这个:

(filter (lambda (e) (member e list1))
        wholelist)
=> '(3 4 6 9 10)

当然,我们可以使用remove* 做类似的事情,但不太自然:

(remove* (filter-not (lambda (e) (member e list1))
                     wholelist)
         wholelist)
=> '(3 4 6 9 10)

关于你的其他问题:

有没有办法在cond 语句或函数中定义一个列表?

当然,使用let 表达式,或本地defines。例如:

(define (my-function x)
  (let ((my-list '(1 2 3 4 5)))
    <do something with my-list>))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2012-12-23
    • 2017-03-30
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2015-01-11
    相关资源
    最近更新 更多