2015-04-13 4 views
0

Я хочу создать функцию, которая принимает в качестве параметров два списка и возвращает #t, если они пересекаются (имеют какие-либо общие элементы).Пересечение списков в racket

(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)) ; 
+0

Ваш вопрос задает две строки, но ответ, который вы приняли, похоже, касается пересечения двух списков - и, по крайней мере, в мире за пределами Racket, строки и списки - это совсем другие типы. Вы уверены, что ваш вопрос, как изначально написанный, был правильным, ссылаясь на строки? Я сделал заголовок более значимым; исправьте его, если «строками» должны быть «списки». –

+0

@JonathanLeffler Поскольку вы редактировали, я думаю, вы действительно посмотрели предыдущие версии, в которых был фактический код? Я бы сказал, что это была более сложная теория, чем геометрия. – Sylwester

+0

@Sylwester: нет, я раньше не смотрел историю изменений. Интересно, почему код был удален. Это значительно снижает качество вопроса. Я согласен, что это списки, а не строки. Я действительно задавался вопросом, как ответы вывели то, что требовалось; Теперь я вижу. Я буду повторно редактировать, восстанавливая код и меняя строку в списке. –

ответ

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 
0

Если вы хотите пересечение геометрических линий, вы должны смотреть на this file. Он имеет множество геометрических структур и функций, и вы можете увидеть код пересечения here. Даже если ваши строки используют другую структуру, алгоритм здесь должен работать с некоторой настройкой.

Смежные вопросы