File: ref-flatten.5.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 (28 lines) | stat: -rw-r--r-- 647 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
25
26
27
28
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))

datatype t =
   A' of int ref * int
 | B'

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, n) => print (concat [Int.toString (!r + n), "\n"])
    | B' => ()