F # - создание 100 объектов в списке - самый функциональный и идиоматический способ

В F # какой самый функциональный и идиоматический способ создания или «обновления» 100 новых объектов в список.

Я думаю, для примера мы могли бы использовать DateTime в качестве примера объекта.


person BuddyJoe    schedule 08.04.2011    source источник
comment
в схеме, которую мы только что сделали (и я ржавый в этом): объявить список приложений xtogo append (if (> x 0) (appendlist (cons list append) (- xtogo 1) append) (list))   -  person Jean-Bernard Pellerin    schedule 08.04.2011


Ответы (3)


В качестве альтернативы, как выражение списка:

[for i in 1..100 -> new System.DateTime()]

Но я думаю, что это менее идиоматично.

person wmeyer    schedule 08.04.2011
comment
@Ingo: В F # у вас есть последовательности для подобных вещей. (Seq.initInfinite id) — это, например, неотрицательные целые числа. - person wmeyer; 08.04.2011
comment
@Ingo: F# имеет List.replicate, Seq.take, Seq.iter и так далее. F# также имеет некоторые приятные преимущества, например, List.ofArray не вызывает переполнения стека, как getElems в Haskell. Ну что ж... - person J D; 10.04.2011

я бы подумал об использовании

[|for i in 1..100 -> new System.DateTime() |]

так как вы работаете с изменяемыми данными.

person Community    schedule 08.04.2011
comment
С каких пор DateTime изменчив? - person Joel Mueller; 09.04.2011
comment
Да, я просто попытался проголосовать за свой ответ. Не могу вспомнить, была ли это структура или класс. В любом случае, вероятно, следует просто использовать поплавок. - person ; 09.04.2011
comment
Использование неизменяемой или изменяемой коллекции (например, массива) на самом деле не зависит от изменчивости типа элемента. Совершенно нормально иметь массив неизменяемого типа. - Однако нужно быть осторожным с отсортированной коллекцией, такой как Map. Изменение изменяемого ключевого элемента Map, безусловно, плохая идея. - person wmeyer; 09.04.2011
comment
@ Брент, ты рассмешил меня, только что попытавшись проголосовать за мой ответ. Кстати, DateTime - это структура/тип значения. И я не то, что вы имеете в виду, говоря о поплавках. - person Stephen Swensen; 09.04.2011
comment
Вы только что создали массив, а не список. не так ли? - person Lyndon White; 09.04.2011
comment
Да. Я только что создал массив. - person ; 09.04.2011

person    schedule
comment
Хороший. Спасибо. List.init 100 (fun x -> new System.DateTime()) - person BuddyJoe; 08.04.2011
comment
Возможно, даже немного более идиоматично (и короче): List.init 100 (fun _ -> DateTime()) - person Daniel; 08.04.2011