File: ref-flatten.sml

package info (click to toggle)
mlton 20130715-3
  • links: PTS
  • area: main
  • in suites: stretch
  • size: 60,900 kB
  • ctags: 69,386
  • sloc: xml: 34,418; ansic: 17,399; lisp: 2,879; makefile: 1,605; sh: 1,254; pascal: 256; python: 143; asm: 97
file content (24 lines) | stat: -rw-r--r-- 596 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
datatype t =
   A of int ref * int
 | B

val n = 100

val a = Array.tabulate (n, fn i =>
                        case i mod 3 of
                           0 => B
                         | 1 => A (ref 13, 14)
                         | 2 => A (ref 15, 16))

val a' =
   Array.tabulate (n, fn i =>
                   case Array.sub (a, i) of
                      B => B
                    | A (r, n) => A (r, n + 1))

val _ = Array.app (fn A (r, n) => r := 17 + n + !r  | B => ()) a

val _ =
   case Array.sub (a', 1) of
      A (r, _) => print (concat [Int.toString (!r), "\n"])
    | B => ()