F # списки неизменны. Вы не можете "изменить" их. Вы не «добавляете» элементы к ним. Вы можете создать только новый список из старого (но старый остается неизменным и все еще доступным для использования).
Но это неправильное мышление для функционального программирования. В функциональном программировании вы не вычисляете результат путем многократного изменения структур данных. Вместо этого вы создаете большие структуры данных из меньших или используя (и составляете) примитивные функции, которые делают это за вас.
В частности, если у вас есть список, скажем, гипотетически, троек и у вас есть функция, которая может преобразовать одну такую тройку, скажем, гипотетически, в число, и вы хотите составить список этих чисел - это очень хорошо известная примитивная операция с именем map
:
let tripleToNumber (l, w, h) = CubeVolume l w h
let list1 = List.map tripleToNumber tpList
Или вы можете указать встроенную функцию преобразования, не назначая ей отдельное имя:
let list1 = List.map (fun (l, w, h) -> CubeVolume l w h) tpList
И затем вы можете использовать оператор |>
для изменения параметров List.map
, просто чтобы сделайте так, чтобы это выглядело немного лучше:
let list1 = tpList |> List.map (fun (l, w, h) -> CubeVolume l w h)
Или, в качестве альтернативы, вы можете использовать списки F #, которые являются syntacti c sugar: они делают то же самое под капотом, но имеют ( возможно) лучше посмотреть:
let list1 = [for (l, w, h) in tpList -> CubeVolume l w h]
Здесь важно отметить, что ни один из приведенных выше фрагментов на самом деле не изменяет любые данные на месте. Оба они генерируют новое значение путем преобразования старого.