2009-04-19 8 views
3

J'ai 2 listes d'éléments '(a b c)' (d b f) et je veux trouver des différences, union, et intersection dans un résultat. Est-ce possible? Comment?Comment écrire une fonction de schéma qui prend deux listes et retourne quatre listes

J'ai écrit une fonction de membre qui vérifie s'il y a une voiture de la première liste dans la deuxième liste, mais je ne peux pas jeter un membre à la nouvelle liste. Mes résultats doivent être ((a c) (d f) (a b c d f) (b)).

+4

Travail à domicile? Vous devriez ajouter un tag «devoirs» si c'est le cas. –

Répondre

10

Comme d'autres l'ont dit, tout ce que vous devez faire est de créer des fonctions distinctes pour calculer l'intersection, l'union et la soustraction des deux ensembles, et les appeler à partir checkresult:

(define (checkresult a b) 
    (list (subtract a b) 
     (subtract b a) 
     (union a b) 
     (intersect a b))) 

Voici quelques union exemple , intersection et fonctions de soustraction:

(define (element? x lst) 
    (cond ((null? lst) #f) 
     ((eq? x (car lst)) #t) 
     (#t (element? x (cdr lst))))) 

(define (union a b) 
    (cond ((null? b) a) 
     ((element? (car b) a) 
     (union a (cdr b))) 
     (#t (union (cons (car b) a) (cdr b))))) 

(define (intersect a b) 
    (if (null? a) '() 
     (let ((included (element? (car a) b))) 
     (if (null? (cdr a)) 
      (if included a '()) 
      (if included 
       (cons (car a) (intersect (cdr a) b)) 
       (intersect (cdr a) b)))))) 

(define (subtract a b) 
    (cond ((null? a) '()) 
     ((element? (car a) b) 
     (subtract (cdr a) b)) 
     (#t (cons (car a) (subtract (cdr a) b))))) 

Note: puisque ceux-ci sont des ensembles et l'ordre n'a pas d'importance, les résultats ne sont pas triés. En outre, les fonctions supposent que les entrées sont des ensembles, et donc ne font aucun contrôle en double au-delà de ce qui est requis pour l'union.

+3

C'est totalement devoirs ...: -/ –

+6

Et c'était amusant à faire! Je répondrai à toutes les questions que je peux, y compris les devoirs. Ce n'est pas mon travail de m'assurer que les étudiants ne trichent pas. –

+0

merci j'ai écrit intersection et union mais je ne sais vraiment pas comment appeler et écrire une nouvelle liste je l'ai eue merci .. –

2

Bien sûr que c'est possible. Voici quelques conseils:

  1. Quel est le résultat de la combinaison d'une liste et d'une liste vide?
  2. Vous n'avez pas à tout faire en même temps. Prenez une pièce à la fois.
3

Bien sûr que c'est possible. En supposant que vous avez la fonction pour calculer les différences, l'union intersection etc:

(define (checkResult lis1 list2) 
    (list (difference lis1 lis2) 
     (union ... 
1

En plus de Charlie Martin et les réponses de tomjen, je suis venu avec cette source:

Union Intersection and Difference

La mise en œuvre de la fonctions distinctes peuvent être trouvées avec de bonnes explications.

+0

Dans le cas où c'est un HW, ce qui semble tout à fait si, désolé si je ne suis pas censé tout révéler, mais seulement fournir des conseils et des conseils. – rpr

Questions connexes