Мне нужно написать программу в Haskell, которая решает некоторые недетерминированные проблемы. Я думаю, что я понимаю Список Монады в 75%, поэтому это незабываемый выбор, но ...Haskell List Monad State Dependance
(Моя проблема заключается в заполнении nxm доски судами и водой. Я получаю суммы рядов и количеств, каждая часть корабля имеет свою ценность etd его не важно сейчас).
Я хочу охранять как можно раньше, чтобы сделать алгоритм эффективным, заключается в том, что возможность вставки корабля зависит от того, что мне дано/что я вставил в перемещение previus, позволяет назвать это состояние платы, и я понятия не имею как передать его Потому что я не могу генерировать новое состояние от одной только платы)
Мои Algoritm является: 1. Инициализировать Первый совет 2. сформировать Первая строка пытается применять все возможные вставки (я могу вставить овец verticaly так я необходимо помнить о том, чтобы вставить другие части овец в нижние ряды) 3. Решите проблему для небольшой доски (ofc после генерации каждые 2 строки, я все проверю)
Но я не знаю, как я могу передавать новые состояния, потому что, насколько я читал о State Monad, он генерирует новое состояние только из старого состояния, и это невозможно для меня, я бы хотел создать новое состояние при выполнении операций по значению).
Прошу прощения за мою ненависть к Haskell, но после нескольких лет программирования на императивных языках, вынужденных сражаться с этими Монадами, чтобы делать то, что на других языках, которые я мог написать почти мгновенно, заставляет меня сходить с ума. (ну другие вещи в Haskell хороши для меня, и некоторые из них на самом деле довольно приятные).
Вам не нужно писать это монадически. Вы вполне способны сделать это с помощью старой старой рекурсии и карты. (Монада списка - это просто «mapConcat», который вы знаете) – jozefg
да, я знаю, как работает привязка к списку Monad. И список монады делают для меня многое, как охрану. – user2184057
после размышления, может быть, неплохо было бы оставить одиночные монады – user2184057