在球拍中相交列表

时间:2015-04-13 22:49:37

标签: racket

我想创建一个函数,它将参数作为参数两个列表,如果它们相交则返回#t(具有共同的任何元素)。

 (define member?
  (lambda (a lat)
    (cond
      ((null? lat) #f)
      (else (or (equal? (car lat) a) 
                (member? a (cdr lat)))))))
(define intersect
  (lambda (set1 set2)
    (cond
      ((null? set1)(quote ()))
      ((member? (car set1) set2)
       (cons (car set1)
             (intersect (cdr set1) set2)))


      (else (intersect (cdr set1) set2)))))

(intersect '(1 2) '(2 4)) ; 

2 个答案:

答案 0 :(得分:1)

您想查看sets in the documentation。与它们相交可以写成:

(define (intersect? lst1 lst2)
  (let ((set1 (list->set lst1))
        (set2 (list->set lst2)))
    (set=? set1
           (set-intersect set1
                          set2))))

(intersect? '(a b) '(b a d)) ; ==> #t
(intersect? '(b a d) '(a b)) ; ==> #f

答案 1 :(得分:0)

如果你想要几何线的交集,你应该看一下this file。它有很多几何结构和功能,你可以看到交叉代码here。即使你的线条使用不同的结构,这里的算法也应该有一些调整。