|
|
|
@ -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
|
|
|
|
|
|
|
|
|
|
[<EntryPoint>]
|
|
|
|
|
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
|