diff --git a/Merge FSharp/src/Merge.fs b/Merge FSharp/src/Merge.fs new file mode 100644 index 000000000..d9744d6c4 --- /dev/null +++ b/Merge FSharp/src/Merge.fs @@ -0,0 +1,10 @@ +module Merge + +let rec merge list1 list2 = + match list1, list2 with + | [], ys -> ys // If either list is empty, return the other + | xs, [] -> xs + | x::xs, y::ys when x <= y -> // Compare heads of both lists + x :: merge xs (y::ys) // Take smaller element (x) and recurse + | x::xs, y::ys -> + y :: merge (x::xs) ys // Otherwise take y and recurse \ No newline at end of file diff --git a/Merge FSharp/test/MergeTests.fs b/Merge FSharp/test/MergeTests.fs new file mode 100644 index 000000000..91f447118 --- /dev/null +++ b/Merge FSharp/test/MergeTests.fs @@ -0,0 +1,13 @@ +module MergeTests + +[] +let tests = + testList "Merge Tests" [ + testCase "Merge two sorted lists" <| fun _ -> + let result = merge [1;3;5] [2;4;6] + Expect.equal result [1;2;3;4;5;6] "Should merge sorted lists" + + testCase "Merge with empty list" <| fun _ -> + let result = merge [] [2;4;6] + Expect.equal result [2;4;6] "Should handle empty first list" + ] \ No newline at end of file diff --git a/Merge FSharp/test/mergeExample.sln b/Merge FSharp/test/mergeExample.sln new file mode 100644 index 000000000..a4f65d010 --- /dev/null +++ b/Merge FSharp/test/mergeExample.sln @@ -0,0 +1,13 @@ + + + Exe + f# 8.0 + + + + + + + + + diff --git a/sample-programs b/sample-programs new file mode 160000 index 000000000..f015137f2 --- /dev/null +++ b/sample-programs @@ -0,0 +1 @@ +Subproject commit f015137f2111965c62310f5293ff986dfb7b3b81