List 球拍与两张名单相交

List 球拍与两张名单相交,list,scheme,racket,List,Scheme,Racket,我正在尝试将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 = '(

我正在尝试将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)

我确信contains工作正常,所以错误一定在我发布的代码中。谢谢

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)

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)

嘿,如果你不是为了好玩,你可以使用球拍的功能

(set-intersect '(1 2 3 4 7) '(3 4 5 6)) ; => '(4 3)

嘿,如果你不是为了好玩,你可以使用球拍的功能

(set-intersect '(1 2 3 4 7) '(3 4 5 6)) ; => '(4 3)

嗨,谢谢你的评论。这是为了一项任务。由于错误不是概念性的,我被允许在线寻求帮助=PHi,谢谢你的评论。这是为了一项任务。由于错误不是概念性的,因此允许我联机寻求帮助=P