Сообщение от
Владимир Ситников
Т.е. всё, как я и говорил: вы здесь в функцию set_reset передаёте "состояние триггера".
Да, в вашем исполнении функция set_reset является чистой, но вы жульничаете в том плане, что помимо S и R аргументов передаёте дополнительный аргумент с состоянием триггера.
Тут я ошибся. Да, действительно показанная реализация set_reset удовлетворяет моему исходному вопросу, и получает всего 2 аргумента.
Да, был неправ, когда говорил про pointfree -- оно в конкретном случае не играет роли.
Да, ваша прошлая реализация set_reset не получает никаких лишних скрытых аргументов, но эта реализация и не возвращает bool результат.
Технически, ваша реализация set_reset возвращает функцию "состояние триггера должно сохраниться", "состояние триггера должно перейти в false", и т.п.
Потом эти функции последовательно применяются к начальному состоянию.
Да, это позволяет сделать как бы SR триггер на Haskell, но это вольная/творческая переработка ОЛ программы.
В том же самой же среде ОЛ, SR триггер получает два bool на вход и тут же возвращает bool на выходе.
Поэтому, переформулирую вопрос про SR-триггер.
Реализуйте вот такой SR-триггер:
Код:
set_reset :: Bool -> Bool -> Bool
set_reset s r = ...
SR-триггер в ОЛ это именно такой блок. Получает два bool, возвращает bool. Вы утверждаете, что он чистый, значит должно быть несложно составить аналогичную Haskell функцию.