File: ref-flatten.sml

package info (click to toggle)
mlton 20061107-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 27,828 kB
  • ctags: 61,118
  • sloc: ansic: 11,446; makefile: 1,339; sh: 1,160; lisp: 900; pascal: 256; 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 => ()