Вы должны использовать ссылки, чтобы нарушить постоянство - так как функциональное программирование использует постоянные данные. Используйте ключевое слово ref
в объявлении myList:
let myList = ref (createListOfElements 5)
Для разыменования списка используйте !
, поэтому рассматриваемая строка становится
if f#isEven then
myList := !myList @ f#getP;
Я предлагаю вам использовать аккумулятор, так как он в духе стиля функционального программирования, например:
let rec process1 lst = function
| x when x <= 10 ->
let f = new foo x in
if f#isEven then
process1 (lst @ (createListOfElements f#getP)) (param+1)
else
process1 lst (param+1)
| _ -> lst
EDIT:
Я не скомпилировал свой код и не заметил, что вы используете неправильный символ для изменения значения ссылки. Правильный символ - :=
. Смотрите мои изменения выше. Тем не менее, я настоятельно рекомендую вам избегать ссылок и идти путем накопителя.