(define (nullset? x)
(equal? x '(0)))
(define (set? lat)
((letrec
((S (cond
((null? lat) #t)
((member? (car lat) (cdr lat)) #f)
(else (set? (cdr lat)))))
(member? (cond
((null? lat) #f)
(else (or (equal? (car lat) a)
(member? a (cdr lat)))))))
(S lat))))
(define (setcmp-f? test? lat1 lat2)
(cond
((or (null? lat1)
(null? lat2)) #t)
((or (not (null? (car lat1)))
(not (null? (car lat1))))
(test? (car lat1)
(car lat2)))
(else (set-cmp-f? test? (cdr lat1) (cdr lat2)))))
(define (member>=? xl xr)
(setcmp-f? >= xl xr))
(define (union set1 set2)
(cond
((null? set1) set2)
((member? (car set1)
set2)
(union (cdr set1)
set2)
(else (cons (car set1)
(union (cdr set1)
set2))))))
(define (intersect set1 set2)
(cond
((null? set1)
'())
((member? (car set1) set2)
(cons (car set1)
(intersect (cdr set1)
set2)))
(else (intersect (cdr set1)
set2))))
(define first$ car)
(define (build s1 s2)
(cons s1
(cons s2 '())))
(define second$ (lambda (str) ((second str))))
(define str-maker
(lambda (next n)
(build n (lambda ()
(str-maker next (next n))))))
(define frontier
(lambda (str n)
(cond
((zero? n) '())
(else (cons (first$ str)
(frontier (second$ str)
(- n 1)))))))
(define-record-type :surreal-number
(make-surreal l r)
surreal-number?
(l left-side)
(r right-side))
(define (well-formed? surreal-number)
(and
(set? (l surreal-number))
(set? (x surreal-number))
(not (member=>? (l surreal-number)
(r surreal-number)))))
(define (create-surreal-number l r)
(if (well-formed? l r)
(make-surreal l r)
(display "Error in XL/XR Check Input")))
(define zero (create-surreal-number '(0) '(0)))
(define (pretty-print-surreal surreal-number)
(display "(") (display (l surreal-number))
(display ",") (display (r surreal-number)) (display ")"))
(define (display x)
(if (surreal? x)
(pretty-print-surreal x)
(display x)))
(define (surreal-dydactic-function a b)
(/ a (expt 2 b)))
(define (Surreal+/-1 surreal-number sign)
(make-surreal
(surreal-dydactic-function (sign (xl surreal-number))
(sign (xr surreal-number)))))
(define (+/-one? side)
(and (nullset? (car side)) (nullset? (cadr side))))
(define (value surreal-number)
(+ (addvec (xl surreal-number))
(addvec (xr surreal-number))))
(define (add-surreal surreal-number1 surreal-number2)
(make-surreal
(union (xl surreal-number1)
(xl surreal-number2))
(union (xr surreal-number1)
(xr surreal-number2))))
(define (subtract-surreal surreal-number1 surreal-number2)
(make-surreal
(intersect (xl surreal-number1)
(xl surreal-number2))
(intersect (xr surreal-number1)
(xr surreal-number2))))
(define next-day-surreal-number
(str-maker next-surreal zero))
category-code