diff --git a/lab 5/LambdaTraversal/LambdaTraversal.fsproj b/lab 5/LambdaTraversal/LambdaTraversal.fsproj new file mode 100755 index 0000000..299cf40 --- /dev/null +++ b/lab 5/LambdaTraversal/LambdaTraversal.fsproj @@ -0,0 +1,12 @@ + + + + Exe + net7.0 + + + + + + + diff --git a/lab 5/LambdaTraversal/Program.fs b/lab 5/LambdaTraversal/Program.fs new file mode 100755 index 0000000..949b0a2 --- /dev/null +++ b/lab 5/LambdaTraversal/Program.fs @@ -0,0 +1,35 @@ +let rec traverseNumber' n f acc = + match n with + | 0 -> acc + | n -> traverseNumber' (n / 10) f (f acc (n % 10)) + +let traverseNumber n f init = traverseNumber' n f init + +[] +let main argv = + System.Console.WriteLine("Введите число:") + let number = System.Console.ReadLine() |> int + + let sumResult = traverseNumber number (fun x y -> x + y) 0 + System.Console.WriteLine($"Сумма цифр (λx y → x + y): {sumResult}") + + let mulResult = traverseNumber number (fun x y -> x * y) 1 + System.Console.WriteLine($"Произведение цифр (λx y → x * y): {mulResult}") + + let minResult = traverseNumber number (fun x y -> min x y) System.Int32.MaxValue + System.Console.WriteLine($"Минимальная цифра (λx y → min x y): {minResult}") + + let maxResult = traverseNumber number (fun x y -> max x y) 0 + System.Console.WriteLine($"Максимальная цифра (λx y → max x y): {maxResult}") + + // Демонстрация других форм лямбда-выражений + let sumResult2 = traverseNumber number (fun acc digit -> acc + digit) 0 + System.Console.WriteLine($"Сумма цифр (λacc digit → acc + digit): {sumResult2}") + + let mulResult2 = traverseNumber number (fun acc digit -> + match digit with + | 0 -> acc + | d -> acc * d) 1 + System.Console.WriteLine($"Произведение ненулевых цифр (λacc digit → match digit...): {mulResult2}") + + 0 \ No newline at end of file