Sha256: 474c79df261c738e28e612aa4c620842e11c13f79b33fed1098000ac77d14676

Contents?: true

Size: 816 Bytes

Versions: 159

Compression:

Stored size: 816 Bytes

Contents

fun rebase (inBase, digits, outBase) = let
  fun fromBase base = let
    fun f (x, NONE  ) = NONE
      | f (x, SOME n) =
        if x >= 0 andalso x < base then SOME(n * base + x)
        else NONE
  in
    foldl f (SOME 0)
  end

  fun toBase base = let
    infix divMod
    fun a divMod b = (a div b, a mod b)

    fun swap (a, b) = (b, a)

    fun unfold f b =
      case f b of
        SOME(a, b') => a :: unfold f b'
      | NONE        => []

    fun f 0 = NONE
      | f x = SOME (swap (x divMod base))
  in
    rev o (unfold f)
  end
in
  if inBase < 2
    orelse outBase < 2
    orelse (List.length digits) = 0
    orelse (List.length digits) = (List.length (List.filter (fn x => x = 0) digits))
  then NONE
  else case fromBase inBase digits of
    SOME v => SOME (toBase outBase v)
  | NONE   => NONE
end

Version data entries

159 entries across 159 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.179 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.178 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.177 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.176 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.175 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.174 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.173 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.172 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.171 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.170 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.169 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.167 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.166 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.165 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.164 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.163 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.162 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.161 tracks/sml/exercises/all-your-base/example.sml
trackler-2.2.1.160 tracks/sml/exercises/all-your-base/example.sml