Scheme drracket翻转移除功能

Scheme drracket翻转移除功能,scheme,racket,Scheme,Racket,我有两张单子 (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) 使用

我有两张单子

(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)?? 像

非常感谢你的帮助

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

非常感谢你

在本例中,将比以下内容更有用:我们希望获得
完整列表
中的所有元素,这些元素也是
列表1
中的元素。试试这个:

(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
语句或函数中定义一个列表

当然,请使用表达式或本地
define
s。例如:

(define (my-function x)
  (let ((my-list '(1 2 3 4 5)))
    <do something with my-list>))
(定义(我的函数x)
(让((我的名单)(12345)))
))
您的列表是否始终保证按升序排列?如果是这样的话,有一个更快的解决方案(比奥斯卡的答案更快,后者不需要对列表排序,但速度较慢)。
(define (my-function x)
  (let ((my-list '(1 2 3 4 5)))
    <do something with my-list>))