Created
December 18, 2012 08:53
-
-
Save yao2030/4326280 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(define (union-set set1 set2) | |
(cond ((null? set1) set2) | |
((null? set2) set1) | |
((element-of-set? (car set1) set2) | |
(union-set (cdr set1) set2)) | |
(else | |
(cons (car set1) (union-set (cdr set1) set2))))) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; Sets as unordered lists; | |
;; do not allow duplicates | |
(define (element-of-set? x set) | |
(cond ((null? set) #f) | |
((equal? x (car set)) #t) | |
(else (element-of-set? x (cdr set))))) | |
(define (adjoin-set x set) | |
(if (element-of-set? x set) | |
set | |
(cons x set))) | |
(define (intersection-set set1 set2) | |
(cond ((or (null? set1) (null? set2)) '()) | |
((element-of-set (car set1) set2) | |
(cons (car set1) | |
(intersection-set (cdr set1) set2))) | |
(else (intersection-set (cdr set1) set2)))) | |
(define (union-set set1 set2) | |
(cond ((null? set1) set2) | |
((null? set2) set1) | |
((element-of-set? (car set1) set2) | |
(union-set (cdr set1) set2)) | |
(else | |
(cons (car set1) set2) | |
(union-set (cdr set1) set2)))) | |
;; allow duplicates | |
(define (adjoin-set x set) | |
(cons x set)) | |
Duplicate version is preferable when the problem needs more constructing than selecting.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
two versions of union-set, one is iterative process, the other is recursive