aboutsummaryrefslogtreecommitdiff
path: root/algebraic-structures.group.scm
blob: ab2ba7eabf9c6417c9510f0640f5b4a72d012d09 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(functor ((algebraic-structures group) (M (op unit inv)))
    (op unit inv pow)
  (import (only M op unit inv)
          scheme
          (chicken base))

  (define (pow x n)
    (assert (exact-integer? n))
    (if (negative? n)
        (pow (inv x) (- n))
        (let loop ((i n)
                   (acc unit))
          (if (= i 0)
              acc
              (loop (sub1 i)
                    (op acc x)))))))