Tree is a basic data structure used almost everywhere in a programming language. The following is the my implementation of a binary tree.

type Element = int

type TreeType =

| EmptyTree

| Tree of TreeType * Element * TreeType

let rec iterate tree emptyF commonF=

match tree with

| EmptyTree -> emptyF

| Tree(leftTree, node, rightTree) ->

let l = iterate leftTree emptyF commonF

let r = iterate rightTree emptyF commonF

commonF l node r

let emptyF = "Empty"

let commonF l n r = System.String.Format("({0} {1} {2})", l, n, r)

let t = Tree (Tree (EmptyTree, 2, EmptyTree), 1 ,EmptyTree)

printfn "%A" (iterate t emptyF commonF)

the emptyF is a function to process the empty node. I already read in a F# book about "everything in F# is a function", the emptyF is good sample. I was originally thinking this is a string value, but actually it is a function returns a constant value.

The latest F# best practice suggests to use C# like function definition if this API will be invoked by a C# programmer. But I do not have this requirement for now.

## No comments:

Post a Comment