Поскольку это домашнее задание, я не хочу просто дать вам полностью закодированное решение, но вот несколько советов:
Сначала , поскольку fold
разрешено, вы можете реализовать map
через fold
. Функция свертывания взяла бы список, накопленный «до сих пор», и добавила бы следующий элемент, преобразованный с помощью функции отображения. Хотя результат получится обратным (fold
перемещается вперед, но вы готовите на каждом шаге), так что, возможно, это не сработает, если вам не разрешено List.rev
.
Второй - самый очевидный, фундаментальный способ: голая рекурсия. Вот способ думать об этом: (1) когда аргумент является пустым списком, результат должен быть пустым списком; (2) когда аргумент является непустым списком, результатом должна быть длина головы аргумента, добавленная к списку длин хвоста аргумента, который может быть вычислен рекурсивно. Попробуйте записать это в F #, и будет ваше решение.