summaryrefslogtreecommitdiffstats
path: root/net/ricketyspace/sicp/two/one.scm
blob: 5d184dcc844911e8ec7cae7e8058ecf0d158f053 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
;;;; Under Creative Commons Attribution-ShareAlike 4.0
;;;; International. See
;;;; <https://creativecommons.org/licenses/by-sa/4.0/>.

(define-module (net ricketyspace sicp two one)
  #:export (make-rat))

(define (gcd a b)
  (if (= b 0)
      a
      (gcd b (remainder a b))))

(define (make-numer n neg?)
  (if neg? (* -1 (abs n))
      (abs n)))
(define (make-denom d) (abs d))

(define (make-rat n d)
  (let ((g (abs (gcd n d)))
        (neg? (< (* n d) 0)))
    (cons (/ (make-numer n neg?) g)
          (/ (make-denom d) g))))