diff --git a/F#/TreeMap.Test/TreeMap.Test.fsproj b/F#/TreeMap.Test/TreeMap.Test.fsproj new file mode 100644 index 0000000..9b7b4e9 --- /dev/null +++ b/F#/TreeMap.Test/TreeMap.Test.fsproj @@ -0,0 +1,29 @@ + + + + net8.0 + + false + true + true + + + + + + + + + + + + + + + + + + + + + diff --git a/F#/TreeMap.Test/TreeMapTest.fs b/F#/TreeMap.Test/TreeMapTest.fs new file mode 100644 index 0000000..aca86d3 --- /dev/null +++ b/F#/TreeMap.Test/TreeMapTest.fs @@ -0,0 +1,12 @@ +module TreeMap.Test + +open NUnit.Framework +open FsUnit + +[] +let LeafMapTest () = + Leaf 1 |> treeMap ((+) 1) |> should equal (Leaf 2) + +[] +let TreeMapTest () = + Node(2, Leaf 1, Node(3, Leaf 4, Leaf 5)) |> treeMap ((+) 1) |> should equal (Node(3, Leaf 2, Node(4, Leaf 5, Leaf 6))) diff --git a/F#/TreeMap/TreeMap.fs b/F#/TreeMap/TreeMap.fs new file mode 100644 index 0000000..723ba42 --- /dev/null +++ b/F#/TreeMap/TreeMap.fs @@ -0,0 +1,10 @@ +module TreeMap + +type BinTree<'T> = + | Node of 'T * BinTree<'T> * BinTree<'T> + | Leaf of 'T + +let rec treeMap func tree = + match tree with + | Node (value, lhs, rhs) -> Node (func value, treeMap func lhs, treeMap func rhs) + | Leaf value -> Leaf (func value) diff --git a/F#/TreeMap/TreeMap.fsproj b/F#/TreeMap/TreeMap.fsproj new file mode 100644 index 0000000..d763c97 --- /dev/null +++ b/F#/TreeMap/TreeMap.fsproj @@ -0,0 +1,12 @@ + + + + net8.0 + true + + + + + + + diff --git a/F#/forSpbu.sln b/F#/forSpbu.sln index 9d54d03..e818636 100644 --- a/F#/forSpbu.sln +++ b/F#/forSpbu.sln @@ -21,6 +21,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "07.03", "07.03", "{5CA9053B EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Homework1", "Homework1\Homework1.fsproj", "{04B15EE4-079A-42ED-ACC8-E2DCD25281C6}" EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "TreeMap", "TreeMap\TreeMap.fsproj", "{68775386-8212-46CE-BA41-10BC58B4DEA2}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "TreeMap.Test", "TreeMap.Test\TreeMap.Test.fsproj", "{91C86FB1-2E6A-4E53-9E04-AE05DAC8517C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -58,6 +62,14 @@ Global {89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Debug|Any CPU.Build.0 = Debug|Any CPU {89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Release|Any CPU.ActiveCfg = Release|Any CPU {89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Release|Any CPU.Build.0 = Release|Any CPU + {68775386-8212-46CE-BA41-10BC58B4DEA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68775386-8212-46CE-BA41-10BC58B4DEA2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68775386-8212-46CE-BA41-10BC58B4DEA2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68775386-8212-46CE-BA41-10BC58B4DEA2}.Release|Any CPU.Build.0 = Release|Any CPU + {91C86FB1-2E6A-4E53-9E04-AE05DAC8517C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {91C86FB1-2E6A-4E53-9E04-AE05DAC8517C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91C86FB1-2E6A-4E53-9E04-AE05DAC8517C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {91C86FB1-2E6A-4E53-9E04-AE05DAC8517C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {7937CDA8-8285-4E23-AD1A-FC0F04FEEFE6} = {91E3BDA2-0836-46C2-95F0-02513FD7F13F}