Я пытаюсь построить обычную числовую функцию, чтобы получить массив чисел с плавающей запятой, а затем вернуть массив кортежей, разбивающий массив на N диапазонов равного расстояния, где каждый кортеж представляет нижнюю и верхнюю границы каждого диапазона , Первый элемент первого кортежа в результирующем массиве должен быть минимумом входного массива, а второй элемент последнего кортежа в результирующем массиве должен быть максимумом входного массива.
Моя проблема в том, что я пытаюсь решить эту проблему с помощью сопоставления с шаблоном, и мой код компилируется, но ничего не создается (?) Я получаю предупреждение о том, что третий шаблон никогда не совпадет. Я озадачен, потому что я думал, что я охватил все дела - 1-е, последнее, а затем все промежуточное. Заранее благодарим за любые хорошие идеи о том, как исправить этот код.
let rand1000 = [| for i in 1..1000 do yield rnd.NextDouble() |]
let intervals (arr: float array) (n : int) =
let L = Array.min(arr);
let U = Array.max(arr);
let increment = U - L / (float n);
let maxGroup = n-1;
[| for i in 0..maxGroup do
let range = match i with
| 0 -> L, L + increment
| maxGroup -> L + (float n) * increment, U
| _ -> L + (float n) * increment, L + (float (n + 1)) * increment
yield range
|]
let inters = intervals rand1000;