Annotation of researchv10no/cmd/sml/src/bignums/bigint.sml, revision 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.