Code Review
Compare your solutions
#| Для этого упражнения нет проверок.
Любое решение будет считаться успешным ответом. |#
(define (gcd a b)
(if (= b 0)
a
(gcd b (remainder a b))))
(gcd 206 40)
; Normal-order evaluation -> 18 remainder calls
; (if (= 40 0))
(gcd 40 (remainder 206 40))
; (if (= (remainder 206 40) 0)) #1 - first remainder call
(gcd (remainder 206 40) (remainder 40 (remainder 206 40)))
; (if (= (remainder 40 (remainder 206 40)) 0)) #2
; (if (= (remainder 40 6) 0)) #3
(gcd (remainder 40 (remainder 206 40))
(remainder (remainder 206 40) (remainder 40 (remainder 206 40))))
; (if (= (remainder (remainder 206 40) (remainder 40 (remainder 206 40))) 0)) #4-5
; (if (= (remainder 6 (remainder 40 6)) 0)) #6
; (if (= (remainder 6 4) 0)) #7
(gcd (remainder (remainder 206 40) (remainder 40 (remainder 206 40)))
(remainder (remainder 40 (remainder 206 40))
(remainder (remainder 206 40) (remainder 40 (remainder 206 40)))))
; (if (= (remainder (remainder 40 (remainder 206 40))
; (remainder (remainder 206 40) (remainder 40 (remainder 206 40)))) 0))
; #8-10
; (if (= (remainder (remainder 40 6) (remainder 6 (remainder 40 6))) 0)) #11-12
; (if (= (remainder 4 (remainder 6 4)) 0)) #13
; (if (= (remainder 4 2) 0)) -> #t #14
(remainder (remainder 206 40) (remainder 40 (remainder 206 40))); #15-16
(remainder 6 (remainder 40 6)); #17
(remainder 6 4); -> 2 #18
; Applicative-order evaluation -> 4 remainder calls
(gcd 40 (remainder 206 40)); #1
(gcd 40 6)
(gcd 6 (remainder 40 6)); #2
(gcd 6 4)
(gcd 4 (remainder 6 4)); #3
(gcd 4 2)
(gcd 2 (remainder 4 2)); #4
(gcd 2 0); -> 2