我正在尝试将Racket上的两个列表相交,但是以下代码无法正常工作:
(define (intersection a b)
(if (null? a)
'()
(if (contains (car a) b)
(cond (car a)(intersection (cdr a) b))
(intersection (cdr a) b))))
结果总是以列表b中包含的列表a的第一项加上列表a的其余部分结束。例如:
a = '(1 2 3 4 5 6)
b = '( 10 20 4 30 33)
将返回:
'(4 5 6)
我确定包含内容正确运行,因此错误必须出在我发布的代码中。谢谢!
cond
是一种特殊形式,是嵌套的就地替换if
。在我看来,您无意检查是否car
为真,因此a
始终是结果,因此我想您实际上想使用的是cons
:
(define (intersection a b)
(if (null? a)
'()
(if (contains (car a) b)
(cons (car a) (intersection (cdr a) b))
(intersection (cdr a) b))))
(define contains member) ; contains wasn't defined by I guess member will do
(intersection '(1 2 3 4 7) '(3 4 5 6)) ; ==> (3 4)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句