#.net #f# #functional-programming #idioms
#.net #f# #функциональное программирование #идиомы
Вопрос:
Какой наиболее функциональный и идиоматичный способ создания или «обновления» 100 новых объектов в списке в F #?
Я думаю, для примера мы могли бы использовать DateTime в качестве примера объекта.
Комментарии:
1. в схеме мы только что сделали (и я устал от этого): объявить список приложений, который нужно добавить (if (> x 0) (список приложений (добавление списка минусов) (- xtogo 1) append) (список))
Ответ №1:
List.init 100 (fun x -> x * 2)
Комментарии:
1. Неплохо. Спасибо. List.init 100 (fun x -> новая система. DateTime())
2. Возможно, даже немного более идиоматичный (и более короткий):
List.init 100 (fun _ -> DateTime())
Ответ №2:
Альтернативно, как выражение списка:
[for i in 1..100 -> new System.DateTime()]
Но я думаю, что это менее идиоматично.
Комментарии:
1. @Ingo: В F # у вас есть «последовательности» для подобных вещей.
(Seq.initInfinite id)
например, неотрицательные целые числа.2. @Ingo: В F # есть
List.replicate
,Seq.take
,Seq.iter
и так далее. F # также обладает некоторыми приятными преимуществами, такими какList.ofArray
отсутствие переполнения стека, какgetElems
в Haskell. Ну что ж…
Ответ №3:
Я бы рассмотрел возможность использования
[|for i in 1..100 -> new System.DateTime() |]
поскольку вы работаете с изменяемыми данными.
Комментарии:
1. С каких это
DateTime
пор он стал изменяемым?2. Да, я только что попытался отклонить свой ответ. Не могу вспомнить, была ли это структура или класс. Вероятно, в любом случае следует просто использовать float.
3. Использовать ли неизменяемую или изменяемую коллекцию (например, массив), на самом деле не зависит от изменяемости типа элемента. Совершенно нормально иметь массив неизменяемого типа. — Однако нужно быть осторожным с отсортированной коллекцией, подобной
Map
. Изменение изменяемого ключевого элементаMap
, безусловно, плохая идея.4. @Brent, ты рассмешил меня «просто пытался отклонить мой ответ». КСТАТИ, DateTime — это struct / ValueType. И я не понимаю, что вы имеете в виду, говоря о числах с плавающей точкой.
5. Вы только что создали массив, а не список. не так ли?