0 people like it.

Tree traverse & compare

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
type Node = Node of Node * Node | Leaf of int
let rec traverse node =
    seq { match node with Node (l, r) -> yield! traverse l; yield! traverse r | Leaf d -> yield d }
let compare l r = Seq.forall2 (=) (traverse l) (traverse r)

traverse (Node (Node (Node (Leaf 4, Leaf 1), Leaf 5), Leaf 6));;
// val it : seq<int> = seq [4; 1; 5; 6]
compare (Node (Node (Node (Leaf 4, Leaf 1), Leaf 5), Leaf 6)) (Node (Leaf 4, Node (Leaf 1, Node (Leaf 5, Leaf 6))));;
// val it : bool = true
Multiple items
union case Node.Node: Node * Node -> Node

--------------------
type Node =
  | Node of Node * Node
  | Leaf of int

Full name: Script.Node
union case Node.Leaf: int -> Node
Multiple items
val int : value:'T -> int (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.int

--------------------
type int = int32

Full name: Microsoft.FSharp.Core.int

--------------------
type int<'Measure> = int

Full name: Microsoft.FSharp.Core.int<_>
val traverse : node:Node -> seq<int>

Full name: Script.traverse
val node : Node
Multiple items
val seq : sequence:seq<'T> -> seq<'T>

Full name: Microsoft.FSharp.Core.Operators.seq

--------------------
type seq<'T> = System.Collections.Generic.IEnumerable<'T>

Full name: Microsoft.FSharp.Collections.seq<_>
val l : Node
val r : Node
val d : int
val compare : l:Node -> r:Node -> bool

Full name: Script.compare
module Seq

from Microsoft.FSharp.Collections
val forall2 : predicate:('T1 -> 'T2 -> bool) -> source1:seq<'T1> -> source2:seq<'T2> -> bool

Full name: Microsoft.FSharp.Collections.Seq.forall2
Raw view Test code New version

More information

Link:http://fssnip.net/8l
Posted:14 years ago
Author:
Tags: