Here is another data definition for a set of numbers:

;; a set of numbers is a function:
;;   number -> boolean

The intention is that applying the set to a number determines if the number is in the set. For example, this function:

  (lambda (x) false)

represents the set with no numbers and this function:

  (lambda (x) (or (= x 2) (= x 1)))

represents the set that contains only the numbers 1 and 2.

 

Develop the same three functions from the previous page, but using the new data definition:

;; start : number -> set-of-numbers
;; to build a new set of numbers that contains only n
(define (start n) ...)

;; extend : number set-of-numbers -> set-of-numbers
;; to build a bigger set of numbers, extending son.
(define (extend n son) ...)

;; test : number set-of-numbers -> boolean
;; to determine if n is in son.
(define (test n son) ...)

Solution

;; start : number -> set-of-numbers
;; to build a new set of numbers that contains only n
(define (start n) (lambda (x) (= x n)))
;; extend : number set-of-numbers -> set-of-numbers
;; to build a bigger set of numbers, extending son.
(define (extend n son)
  (lambda (y)
    (or (= n y)
        (son y))))
  
;; test : number set-of-numbers -> boolean
;; to determine if n is in son.
(define (test n son)
  (son n))