;;;;;;;;;;;;;;
;Problem Set 3
;Grant Oladipo
;January 19, 2006


;INDIVIDUAL PROBLEMS

;;;;;;;;;;
;Problem 1
;;;;;;;;;;

(display "\nProblem 1\n\n")

(define with-tax 
  (lambda (sub-total)
    (* 1.05 sub-total)))

(with-tax 5.00)
(with-tax 259.99)

;;;;;;;;;;
;Problem 2
;;;;;;;;;;

(display "\nProblem 2\n\n")

(define num-digits
  (lambda (number)
    (if (= 0 number)
        0
        (+ 1 (num-digits (quotient number 10))))))

(num-digits 1)
(num-digits 142)

;;;;;;;;;;
;Problem 3
;;;;;;;;;;

(display "\nProblem 3\n\n")

(define add-digit
  (lambda (number digit)
    (+ (* number 10) digit)))

(add-digit 32 4)
(add-digit 1944 7)

;REASONABLE PROBLEMS

;;;;;;;;;;
;Problem 1
;;;;;;;;;;

(display "\nProblem 1\n\n")

(define remainder
  (lambda (dividend divisor)
    (if (> divisor dividend)
        dividend
        (remainder (- dividend divisor) divisor))))

(define divisible?
  (lambda (dividend divisor)
    (if (> (remainder dividend divisor) 0)
        #f
        #t)))

(define divisible?
  (lambda (dividend divisor)
    (if (< dividend 1)
        (= dividend 0)
        (divisible? (- dividend divisor) divisor))))

(divisible? 6 3)
(divisible? 37 4)

;;;;;;;;;;
;Problem 2
;;;;;;;;;;

(display "\nProblem 2\n\n")

(define inc
  (lambda (x)
    (+ 1 x)))

(define dec
  (lambda (x)
    (- x 1)))

(define slow-add
  (lambda (addend1 addend2)
    (if (= addend1 0)
        addend2
        (slow-add (dec addend1) (inc addend2)))))

(slow-add 5 3)
(slow-add 19 7)


;STICKY PROBLEMS

;;;;;;;;;;
;Problem 1
;;;;;;;;;;

(display "\nProblem 1\n\n")

(define smallest-factor
  (lambda (number limit)
    (if (divisible? number limit)
        (if (> number limit)
            limit
            #f)
        (smallest-factor number (inc limit)))))

(smallest-factor 8 3)
(smallest-factor 96 94)

;;;;;;;;;;
;Problem 2
;;;;;;;;;;

(display "\nProblem 2\n\n")

(define prime?
  (lambda (number)
    (if (smallest-factor number 2)
        #f
        #t)))

(prime? 3)
(prime? 13)
(prime? 12)