Wie ein Schema Funktion zu schreiben, die zwei Listen nehmen und vier Listen
Frage
Ich habe 2 Listen von Elementen '(a b c)' (d b f) und will Unterschiede finden, die Vereinigung und Kreuzung in einem Treffer. Ist das möglich? Wie?
Ich schrieb eine Member-Funktion, die prüft, ob es ein Auto von der ersten Liste in der zweiten Liste ist, aber ich kann nicht ein Mitglied in die neuen Liste werfen.
(define (checkResult lis1 lis2)
(cond...........
))
(checkresult '( a b c) '(d b f))
sollte Ihr Ergebnis (( a c) (d f) (a b c d f) (b))
werden.
Lösung
Wie schon andere gesagt haben, alles, was Sie tun müssen, um getrennte Funktionen schaffen die Kreuzung, Vereinigung zu berechnen, und Subtraktion der beiden Sätze, und nennen sie von checkresult:
(define (checkresult a b)
(list (subtract a b)
(subtract b a)
(union a b)
(intersect a b)))
Hier sind einige Beispiele Vereinigung, Schnitt und Subtraktion Funktionen:
(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)))))
Hinweis: da diese Sätze und Ordnung sind keine Rolle spielt, sind die Ergebnisse nicht sortiert. Außerdem übernehmen die Funktionen, dass die Eingänge sind Sätze, und deshalb keine doppelte tun Kontrolle über das, was für die Union erforderlich ist.
Andere Tipps
Natürlich ist es möglich. Unter der Annahme, dass Sie Funktion haben, die Unterschiede zu berechnen, union Kreuzung etc:
(define (checkResult lis1 list2)
(list (difference lis1 lis2)
(union ...
Sicher ist es möglich. Hier sind ein paar Hinweise:
- was ist das Ergebnis eine Liste und eine leere Liste zu kombinieren?
- Sie haben nicht alles auf einmal zu tun. Nehmen Sie ein Stück auf einmal.
Hinzu kommt Charlie Martin und tomjen die Antworten, ich habe mit dieser Quelle kommen:
Union Überschneidung und Difference
Die Umsetzung der verschiedenen Funktionen können mit schönen Erklärungen zu finden.