File: tree.sml

package info (click to toggle)
smlsharp 4.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 123,732 kB
  • sloc: ansic: 16,725; sh: 4,347; makefile: 2,191; java: 742; haskell: 493; ruby: 305; cpp: 284; pascal: 256; ml: 255; lisp: 141; asm: 97; sql: 74
file content (52 lines) | stat: -rw-r--r-- 1,155 bytes parent folder | download | duplicates (2)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
datatype 'a tree 
  = Empty
  | Node of 'a * 'a tree * 'a tree
datatype 'a paraTree 
  = EMPTY
  | NODE of 'a * index * index
fun size Empty = 1
  | size (Node(a, left, right)) = 1 + size left + size right

fun initialize cell T =
    case T of
      Empty => cell EMPTY
    | Node(a, left, right) => 
      let
        val LEFT =  initialize cell left
        val RIGHT = initialize cell right
      in
        cell (NODE(a, LEFT, RIGHT))
      end

fun finalize value =
    let
      fun conv i = 
          case value i of
            EMPTY => Empty
          | NODE(a, LEFT, RIGHT) =>
            Node(a, conv LEFT, conv RIGHT)
    in
      conv
    end

fun finalize value i =
    case value i of
      EMPTY => Empty
    | NODE(a, LEFT, RIGHT) =>
      Node(a, finalize value LEFT, finalize value RIGHT)


val whereParam = 
    {size = size,
     initialize = initialize,
     default = EMPTY,
     finalize = finalize}

fun mapTree f T = 
    _foreach id in T where whereParam
    with {value, newValue, size} 
    do case value id of
         EMPTY => EMPTY
       | NODE(data, LEFT, RIGHT)  => NODE(f data, LEFT, RIGHT)
    while false
    end