球拍中的相交列表
Intersect lists in racket
我想创建将两个列表作为参数的函数,如果它们相交(有任何共同元素),returns #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)) ;
您想看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
如果你想要几何线的交点,你应该看看this file. It has lots of geometric structures and functions, and you can see the intersection code here。即使您的行使用不同的结构,此处的算法也应该进行一些调整。
我想创建将两个列表作为参数的函数,如果它们相交(有任何共同元素),returns #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)) ;
您想看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
如果你想要几何线的交点,你应该看看this file. It has lots of geometric structures and functions, and you can see the intersection code here。即使您的行使用不同的结构,此处的算法也应该进行一些调整。