;; The first three lines of this file were inserted by DrRacket. They record metadata ;; about the language level of this file in a form that our tools can easily process. #reader(lib "htdp-advanced-reader.ss" "lang")((modname week8_m_full) (read-case-sensitive #t) (teachpacks ((lib "image.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #t #t none #f ((lib "image.ss" "teachpack" "htdp"))))) ; find-divisor : number number number -> number ; returns the greatest divisor of a and b less than i (define (find-divisor i a b) (cond [(= i 1) 1] [else (cond [(and (zero? (remainder a i)) (zero? (remainder b i))) i] [else (find-divisor (- i 1) a b)])] )) (define (gcd-naive a b) (find-divisor (min a b) a b)) (check-expect (gcd-naive 15 5) 5) (check-expect (gcd-naive 249 1577) 83) (time (gcd-naive 11797640 11702559)) ;(gcd larger smaller) = (gcd smaller (remainder larger smaller) ; gcd-clever : number number -> number ; returns gcd of two numbers, assuming larger is first (define (gcd-clever bigger smaller) (cond[(zero? smaller) bigger] [else (gcd-clever smaller (remainder bigger smaller))])) (check-expect (gcd-clever 15 5) 5) (check-expect (gcd-clever 249 1577) 83) (time (gcd-clever 11797640 11702559)) ;(gcd-clever 15 5) ;(gcd-clever 5 0) ;(gcd-clever 0 0) ;(gcd-clever 0 0) ;; a graph is: ;; (make-graph (listof symbol) (symbol -> (listof symbol))) (define-struct graph (nodes neighbor)) ; A ; / ; / ; B C ; |\ /| ; | \/ | ; D E F ; \ | / ; \|/ ; G ; (arrows pointing down) (define mygraph (make-graph '(a b c d e f g) (lambda (node) (cond [(symbol=? node 'a) '(b)] [(symbol=? node 'b) '(d e)] [(symbol=? node 'c) '(e f)] [(member node '(d e f)) '(g)] [(symbol=? node 'g) '()])))) ; add-edge : graph symbol symbol -> graph ; returns graph with an edge from a to b (define (add-edge g a b) (...))