Я пытаюсь создать OCaml функция rv
, которая просматривает список списков и реорганизует элементы в другой список списков, так что первый список состоит из первого элемента каждого из исходных списков, второй список состоит из второй элемент каждого списка и т. д.
Пример:
[["a"; «б»; "c"]; ["d"; «е»; "е"]]
становится
[["а"; "d"]; ["б"; «е»]; ["c"; "f"]]
У меня уже есть функция gather, которая берет список списков и извлекает элементы определенного индекса из каждого списка. Таким образом, в основном, используя предыдущий пример, я мог бы сказать gather (list, 1)
и получить ["b"; "е"]
назад. Мне нужен способ пройти List.length
раз и использовать сборку для каждого индекса элемента.
Причина, по которой это доставляет мне столько неприятностей, кроется в применяемых ограничениях (да, это для школы).Мне не разрешено использовать циклы или локальные / глобальные переменные. Мне также не разрешено использовать let в теле функции. Есть ли другой способ рекурсивно использовать gather
для каждого индекса элемента? Есть ли еще одна функция, которую я должен сделать, которая будет рекурсивно использовать gather
, а затем повторно использовать эту функцию в rv
? Если да, то как бы вы это сделали?