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>))