Возвращает пустой список, потому что вы возвращаете li
, который вы привязали к пустому списку. Помните, что большинство значений неизменны в F #. x @ li
не изменяет список, на который указывает li
.
Вот что делает ваш код, выражение по выражению:
let li = []
связывает пустой список с именемli
x @ li
оценивается как x
, добавленный к li
, но не меняет ни один из них. И поскольку li
является пустым списком, это эквивалентно просто x
. Он фактически ничего не делает.
List.map(fun (x: 'a list) -> x @ li ) list
отображает каждый элемент list
в соответствии с переданной ему функцией, которую мы только что решили ничего не делать. Следовательно, это просто создает однозначную копию list
.
let q = ...
, которая назначает скопированный список на q
, который затем просто отбрасывается, поскольку он нигде не используется.
li
возвращает пустой список.
Могу ли я порекомендовать вам начать с учебника, который сначала научит вас основным понятиям, лежащим в основе F #? Метод проб и ошибок, как правило, не является хорошим подходом к изучению языка программирования, а переполнение стека не очень подходит в качестве службы наставничества.