Annotation of researchv10no/cmd/sml/src/bignums/bigint.sml, revision 1.1.1.1

1.1       root        1: (* Copyright 1989 by AT&T Bell Laboratories *)
                      2: abstraction Bigint : BIGINT = struct
                      3: 
                      4: type bigint = bool list
                      5: 
                      6: fun bigint 0 = nil
                      7:   | bigint i = let val x = i div 2
                      8:                in (x+x<i)::bigint x
                      9:               end
                     10: 
                     11: fun adwc(false::ar, false::br, carry) = carry::adwc(ar,br,false)
                     12:   | adwc(a::ar,  false::br, false) = a::adwc(ar,br,false)
                     13:   | adwc(false::ar, b::br, false) = b::adwc(ar,br,false)
                     14:   | adwc(true::ar, true::br, carry) = carry::adwc(ar,br,true)
                     15:   | adwc(a::ar, true::br, true) = a::adwc(ar,br,true)
                     16:   | adwc(true::ar, b::br, true) = b::adwc(ar,br,true)
                     17:   | adwc(nil, false::br, carry) = carry::adwc(nil,br,false)
                     18:   | adwc(nil, b::br, false) = b::adwc(nil,br,false)
                     19:   | adwc(nil, true::br, true) = false::adwc(nil,br,true)
                     20:   | adwc(nil, nil, false) = nil
                     21:   | adwc(nil, nil, true) = [true]
                     22:   | adwc(a, nil, carry) = adwc(nil, a, carry)
                     23: 
                     24: fun a + b = adwc(a,b,false)
                     25: 
                     26: fun a * nil = nil
                     27:   | (false::a) * b = a * (false::b)
                     28:   | (true::a) * b = b + a * (false::b)
                     29:   | nil * b = nil
                     30: 
                     31: fun getbit(a::r, 0) = a
                     32:   | getbit(_::r, i) = getbit(r,i-1)
                     33:   | getbit(nil, i) = false
                     34: 
                     35: fun >>(a,0) = a
                     36:   | >>(a::r,i) = >>(r,i-1)
                     37:   | >>(nil,i) = nil
                     38: 
                     39: fun size x = length x
                     40: 
                     41: end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.