Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
; - Program 8.1, pg. 232 - (define both (lambda (pred) (lambda (arg1 arg2) (and (pred arg1) (pred arg2))))) ; - End Program - ; - Program 8.2, pg. 232 - (define neither (lambda (pred) (lambda (arg1 arg2) (not (or (pred arg1) (pred arg2)))))) ; - End Program - ; - Program 8.3, pg. 233 - (define at-least-one (lambda (pred) (lambda (arg1 arg2) (or (pred arg1) (pred arg2))))) ; - End Program - ; - Program 8.4, pg. 237 - (define make-set (lambda args (letrec ((list-make-set (lambda (args-list) (if (null? args-list) the-empty-set (adjoin (car args-list) (list-make-set (cdr args-list))))))) (list-make-set args)))) ; - End Program - ; - Program 8.5, pg. 238 - (define none (lambda (pred) (letrec ((test (lambda (s) (or (empty-set? s) (let ((elem (pick s))) (and (not (pred elem)) (test ((residue elem) s)))))))) test))) ; - End Program - ; - Program 7.8, pg. 201 - (define compose (lambda (f g) (lambda (x) (f (g x))))) ; - End Program - ; - Program 8.6, pg. 238 - (define there-exists (lambda (pred) (compose not (none pred)))) ; - End Program - ; - Program 8.7, pg. 239 - (define for-all (lambda (pred) (none (compose not pred)))) ; - End Program - ; - Program 8.8, pg. 240 - (define set-equal (lambda (obj1) (lambda (obj2) (or (and ((neither set?) obj1 obj2) (equal? obj1 obj2)) (and ((both set?) obj1 obj2) ((subset obj1) obj2) ((subset obj2) obj1)))))) ; - End Program - ; - Program 8.9, pg. 241 - (define element (compose there-exists set-equal)) ; - End Program - ; - Program 8.10, pg. 241 - (define contains (lambda (set) (lambda (e) ((element e) set)))) ; - End Program - ; - Program 8.11, pg. 242 - (define superset (lambda (s1) (lambda (s2) ((for-all (contains s1)) s2)))) ; - End Program - ; - Program 8.12, pg. 242 - (define subset (lambda (s1) (lambda (s2) ((superset s2) s1)))) ; - End Program - ; - Program 8.13, pg. 242 - (define cardinal (lambda (s) (if (empty-set? s) 0 (let ((elem (pick s))) (add1 (cardinal ((residue elem) s))))))) ; - End Program - ; - Program 8.14, pg. 243 - (define intersection (lambda (s1 s2) (letrec ((helper (lambda (s1) (if (empty-set? s1) the-empty-set (let ((elem (pick s1))) (if ((contains s2) elem) (adjoin elem (helper ((residue elem) s1))) (helper ((residue elem) s1)))))))) (helper s1)))) ; - End Program - ; - Program 8.15, pg. 244 - (define union (lambda (s1 s2) (letrec ((helper (lambda (s1) (if (empty-set? s1) s2 (let ((elem (pick s1))) (if (not ((contains s2) elem)) (adjoin elem (helper ((residue elem) s1))) (helper ((residue elem) s1)))))))) (helper s1)))) ; - End Program - ; - Program 8.16, pg. 244 - (define difference (lambda (s1 s2) (letrec ((helper (lambda (s1) (if (empty-set? s1) the-empty-set (let ((elem (pick s1))) (if (not ((contains s2) elem)) (adjoin elem (helper ((residue elem) s1))) (helper ((residue elem) s1)))))))) (helper s1)))) ; - End Program - ; - Program 8.17, pg. 245 - (define set-builder (lambda (pred base-set) (letrec ((helper (lambda (s) (if (empty-set? s) base-set (let ((elem (pick s))) (if (pred elem) (adjoin elem (helper ((residue elem) s))) (helper ((residue elem) s)))))))) helper))) ; - End Program - ; - Program 8.19, pg. 246 - (define family-union (lambda (s) (if (empty-set? s) the-empty-set (let ((elem (pick s))) (union elem (family-union ((residue elem) s))))))) ; - End Program - ; - Program 8.20, pg. 246 - (define family-intersection (lambda (s) (if (empty-set? s) the-empty-set (letrec ((fam-int (lambda (s) (let ((elem (pick s))) (let ((rest ((residue elem) s))) (if (empty-set? rest) elem (intersection elem (fam-int rest)))))))) (fam-int s))))) ; - End Program - ; - Program 8.21, pg. 247 - (define set-map (lambda (proc s) (if (empty-set? s) the-empty-set (let ((elem (pick s))) (adjoin (proc elem) (set-map proc ((residue elem) s))))))) ; - End Program - ; - Program 8.22, pg. 247 - (define list->set (lambda (ls) (apply make-set ls))) ; - End Program - ; - Program 8.23, pg. 248 - (define set->list (lambda (s) (if (empty-set? s) '() (let ((elem (pick s))) (cons elem (set->list ((residue elem) s))))))) ; - End Program - (define set-tag "set") ; - Exercise 8.5, pg. 248 - (define for-one (lambda (pred found-proc not-found-proc) (letrec ((test (lambda (s) (if (empty-set? s) (not-found-proc) (let ((v (pick s))) (if (pred v) (found-proc v) (test ((residue v) s)))))))) test))) ; - End Exercise - ; - Exercise 8.6, pg. 249 - (define superset (compose for-all contains)) ; - End Exercise - ; - Program 8.24, pg. 250 - (define the-empty-set (cons set-tag '())) (define empty-set? (lambda (s) (eq? s the-empty-set))) (define set? (lambda (arg) (and (pair? arg) (eq? (car arg) set-tag)))) (define pick (lambda (s) (let ((ls (cdr s))) (if (null? ls) (error "pick: The set is empty.") (list-ref ls (random (length ls))))))) ; - End Program - ; - Program 8.25, pg. 251 - (define adjoin (lambda (elem s) (cons set-tag (cons elem (cdr s))))) (define residue (lambda (elem) (lambda (s) (let ((ls (remove elem (cdr s)))) (cond ((null? ls) the-empty-set) (else (cons set-tag ls))))))) ; - End Program - ; - Program 8.26, pg. 252 - (define adjoin (lambda (elem s) (cond ((member? elem (cdr s)) s) (else (cons set-tag (cons elem (cdr s))))))) (define residue (lambda (elem) (lambda (s) (let ((ls (remove-1st elem (cdr s)))) (cond ((null? ls) the-empty-set) (else (cons set-tag ls))))))) ; - End Program - ; - Exercise 8.7, pg. 253 - (define pick (lambda (s) (car (cdr s)))) ; - End Exercise - ; - Program 8.27, pg. 256 - (define make-op (lambda (x y) (make-set (make-set x) (make-set x y)))) (define op? (lambda (s) (and (set? s) ((for-all set?) s) (= (cardinal (family-intersection s)) 1) (or (= (cardinal s) 1) ((both (lambda (x) (= (cardinal x) 2))) s (family-union s)))))) (define op-1st (lambda (pr) (pick (family-intersection pr)))) (define op-2nd (lambda (pr) (let ((fam-int (family-intersection pr))) (let ((diff (difference (family-union pr) fam-int))) (pick (if (empty-set? diff) fam-int diff)))))) ; - End Program - ; - Program 8.28, pg. 257 - (define make-op (lambda (x y) (list x y))) (define op? (lambda (arg) (and (pair? arg) (pair? (cdr arg)) (null? (cddr arg))))) (define op-1st (lambda (pr) (car pr))) (define op-2nd (lambda (pr) (cadr pr))) ; - End Program - ; - Program 8.29, pg. 257 - (define make-op (lambda (x y) (cons x y))) (define op? (lambda (arg) (pair? arg))) (define op-1st (lambda (pr) (car pr))) (define op-2nd (lambda (pr) (cdr pr))) ; - End Program - ; - Program 8.30, pg. 258 - (define cartesian-product (lambda (s1 s2) (if (empty-set? s1) the-empty-set (let ((elem (pick s1))) (union (set-map (lambda (x) (make-op elem x)) s2) (cartesian-product ((residue elem) s1) s2)))))) ; - End Program - ; - Program 8.31, pg. 259 - (define domain (lambda (rel) (set-map op-1st rel))) (define range (lambda (rel) (set-map op-2nd rel))) ; - End Program - ; - Program 8.32, pg. 260 - (define subrelation/1st (lambda (rel) (lambda (arg) ((set-builder (lambda (x) ((set-equal (op-1st x)) arg)) the-empty-set) rel)))) ; - End Program - ; - Program 8.33, pg. 260 - (define function? (lambda (rel) (or (empty-set? rel) (let ((subrel ((subrelation/1st rel) (op-1st (pick rel))))) (and (= (cardinal (set-map op-2nd subrel)) 1) (function? (difference rel subrel))))))) ; - End Program - ; - Program 8.34, pg. 261 - (define value (lambda (fun) (lambda (arg) (op-2nd (pick ((subrelation/1st fun) arg)))))) ; - End Program -