Я пытаюсь выполнить несколько небольших задач в F #, чтобы помочь разобраться с языком.
Я хотел бы написать функцию, которая принимает n-мерный список и возвращает 1-мерный список, содержащий все элементы из каждого измерения.
Например, если в качестве входных данных использовался следующий трехмерный список: [[[1; 2]; [3; 4]]; [[5; 6]; [7; 8]]], выходные данные быть: [1; 2; 3; 4; 5; 6; 7; 8]
Для двухмерных -> одномерных функция довольно проста:
let coalesce list= List.collect(fun item -> item) list
Вот моя попытка обобщить это в n-измерениях:
let rec coalesce (list, dimension) =
if dimension = 1 then list
else coalesce (List.collect(fun item -> item) list, dimension - 1)
Я получаю следующую ошибку при попытке компиляции:
ошибка FS0001: несоответствие типов. Ожидая
'список списка
но учитывая
'список
Результирующий тип будет бесконечным при объединении 'a' и '' списка '
Проблема здесь:
List.collect(fun item -> item) list
Очевидно, что-то не так с моим мышлением. Как правильно написать такую функцию?