Advertisement
timothy235

sicp-1-2-5-greatest-common-divisors

Feb 16th, 2016
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 2.89 KB | None | 0 0
  1. #lang racket
  2.  
  3. ;; 1.20
  4.  
  5. (define (my-gcd a b)
  6.   (if (zero? b)
  7.     a
  8.     (my-gcd b (remainder a b))))
  9.  
  10. ;; how many remainder operations are performed during the normal-order evaluation
  11. ;; of (my-gcd 206 40)?
  12.  
  13. (my-gcd 206 40)
  14.  
  15. (if (= 40 0) 206 (my-gcd 40 (remainder 206 40)))
  16.  
  17. (my-gcd 40 (remainder 206 40))
  18.  
  19. (if (= (remainder 206 40) 0) ; predicate evaluates one remainder
  20.   40
  21.   (my-gcd (remainder 206 40)
  22.           (remainder 40 (remainder 206 40))))
  23.  
  24. (my-gcd (remainder 206 40)
  25.         (remainder 40 (remainder 206 40)))
  26.  
  27. (if (= (remainder 40 (remainder 206 40)) 0) ; predicate evaluates two remainders
  28.   (remainder 206 40)
  29.   (my-gcd (remainder 40 (remainder 206 40))
  30.           (remainder (remainder 206 40)
  31.                      (remainder 40 (remainder 206 40)))))
  32.  
  33. (my-gcd (remainder 40 (remainder 206 40))
  34.         (remainder (remainder 206 40)
  35.                    (remainder 40 (remainder 206 40))))
  36.  
  37. (if (= (remainder (remainder 206 40)
  38.                   (remainder 40 (remainder 206 40))) ; four remainders
  39.        0)
  40.   (remainder 40 (remainder 206 40))
  41.   (my-gcd (remainder (remainder 206 40)
  42.                      (remainder 40 (remainder 206 40)))
  43.           (remainder (remainder 40 (remainder 206 40))
  44.                      (remainder (remainder 206 40)
  45.                                 (remainder 40 (remainder 206 40))))))
  46.  
  47. (my-gcd (remainder (remainder 206 40)
  48.                    (remainder 40 (remainder 206 40)))
  49.         (remainder (remainder 40 (remainder 206 40))
  50.                    (remainder (remainder 206 40)
  51.                               (remainder 40 (remainder 206 40)))))
  52.  
  53. (if (= (remainder (remainder 40 (remainder 206 40))
  54.                   (remainder (remainder 206 40)
  55.                              (remainder 40 (remainder 206 40)))) ; seven remainders
  56.        0)
  57.   (remainder (remainder 206 40)
  58.              (remainder 40 (remainder 206 40)))
  59.   (my-gcd (remainder (remainder 40 (remainder 206 40))
  60.                      (remainder (remainder 206 40)
  61.                                 (remainder 40 (remainder 206 40))))
  62.           (remainder (remainder (remainder 206 40)
  63.                                 (remainder 40 (remainder 206 40)))
  64.                      (remainder (remainder 40 (remainder 206 40))
  65.                                 (remainder (remainder 206 40)
  66.                                            (remainder 40 (remainder 206 40)))))))
  67.  
  68. (remainder (remainder 206 40)
  69.            (remainder 40 (remainder 206 40))) ; four remainders evaluated
  70.  
  71. 2
  72.  
  73. ;; so noe evaluated remainder 1 + 2 + 4 + 7 + 4 = 18 times
  74.  
  75. ;; how many remainder operations are performed during the applicative-order
  76. ;; evaluation of (my-gcd 206 40)?
  77.  
  78. (my-gcd 206 40)
  79. (my-gcd 40 (remainder 206 40))
  80. (my-gcd 40 6)
  81. (my-gcd 6 (remainder 40 6))
  82. (my-gcd 6 4)
  83. (my-gcd 4 (remainder 6 4))
  84. (my-gcd 4 2)
  85. (my-gcd 2 (remainder 4 2))
  86. (my-gcd 2 0)
  87. 2
  88.  
  89. ;; aoe evaluated remainder only 4 times
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement