Size: a a a

2020 August 14

VM

Volodymyr Mishchenko in F# Chat
Есть задачи, где без мутабельности никак. Но тут можно и обойтись
источник

T

TES in F# Chat
создавая новый мир каждый раз?
источник

RM

Roman Melnikov in F# Chat
TES
создавая новый мир каждый раз?
Наоборот не надо его создавать каждый раз.
источник

RM

Roman Melnikov in F# Chat
В фш часто структуры пересоздаются, но с переиспользованием памяти. В основном рекурсивные структуры данных.
Но тебе тел не надо заново создавать массивы.
источник

T

TES in F# Chat
я потому и спросил, что начал чувствовать, что что-то не так
источник

T

TES in F# Chat
но менять его, вроди как, тоже неправильно...
источник

Dv

Dr. Friedrich von Ne... in F# Chat
TES
Не привидёт ли это к значительному замедлению работы программы? Особенно если мир большой
Приведёт. Читай про персистентные структуры данных.
источник

Dv

Dr. Friedrich von Ne... in F# Chat
Вместо массива есть примерный аналог по функциональности — персистентный вектор. Вот его можно дёшево пересоздавать при модификациях.
источник

АВ

Андрей Вилинский... in F# Chat
стремление правильное, но не любой ценой. Да это трейдоф с перформансом. Чтоб стало так же быстро как с мутебельностью нужно сильно постараться с алгоритмом. Но тогда нужен не аррэй а функциональная структура, которая даёт гарантии и по возможности не пересоздает весь мир, например List.
источник

VM

Volodymyr Mishchenko in F# Chat
источник

Dv

Dr. Friedrich von Ne... in F# Chat
Впрочем, если тебе не нужны преимущества иммутабельности в твоей задаче (например, ты не хранишь набор предыдущих состояний мира для того, чтобы делать time travel) — то тебе и иммутабельность как таковая может быть не нужна. Мутируй свои массивы спокойно.
источник

VM

Volodymyr Mishchenko in F# Chat
Первая попавшаяся реализация. Там, имутабельный мир
источник

Dv

Dr. Friedrich von Ne... in F# Chat
Volodymyr Mishchenko
Первая попавшаяся реализация. Там, имутабельный мир
Там на списках %)
источник

Dv

Dr. Friedrich von Ne... in F# Chat
Ей богу, даж не знаю, что хуже — мутабельные массивы или односвязные списки.
источник

VM

Volodymyr Mishchenko in F# Chat
И я не вижу разницы в циклах по масиву и в вызове map для создания новых массивов или списков. Сложность одинаковая
источник

Dv

Dr. Friedrich von Ne... in F# Chat
Volodymyr Mishchenko
И я не вижу разницы в циклах по масиву и в вызове map для создания новых массивов или списков. Сложность одинаковая
Сложность-то одинаковая, а вот производительность почему-то отличается на порядок.
источник

VA

Vagif Abilov in F# Chat
Андрей Вилинский
стремление правильное, но не любой ценой. Да это трейдоф с перформансом. Чтоб стало так же быстро как с мутебельностью нужно сильно постараться с алгоритмом. Но тогда нужен не аррэй а функциональная структура, которая даёт гарантии и по возможности не пересоздает весь мир, например List.
При этом трейдофы перформанса подобных вещей в большинстве проектов сильно оверрейтед. Чтобы жертвовать мутабельностью ради быстродействия, надо иметь очень важные причины. У большинства их нет.
источник

T

TES in F# Chat
там используется List.mapi. То есть, по факту, ме нужно использовать Array2D.mapi?
источник

T

TES in F# Chat
да, по ходу это оно
источник

VM

Volodymyr Mishchenko in F# Chat
Если список можно создать последовательно, то не страшно.

А в этой игре можно вычислять состояние каждой клетки в любом порядке.

И заметьте, вам нужен исходный масив до конца  вычисления всех новых состояний
источник