Монады Maybe и Либо, короткое замыкание и производительностьC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Монады Maybe и Либо, короткое замыкание и производительность

Сообщение Anonymous »

Функциональное программирование на C++, на странице 214, со ссылкой на ожидаемую монаду, которая совпадает с Haskell's Does, читает

[...] как только какая-либо из функций, к которым вы привязываетесь, вернет ошибку, выполнение остановится и вернуть эту ошибку вызывающему объекту.

Затем в заголовке чуть ниже будет написано
< blockquote>
Если вы вызываете mbind [эквивалентно Haskell >>=] для ожидаемого, содержащего ошибку, mbind даже не будет вызвать функцию преобразования; он просто перенаправит эту ошибку в результат.

что, похоже, "корректирует" то, что было написано раньше. (Я почти уверен, что либо ЛЯХ, либо RWH где-то подчеркивает, что короткого замыкания нет; если помните где, пожалуйста, напомните мне об этом.)
Действительно, насколько я понимаю, от Haskell, заключается в том, что в цепочке монадических привязок все привязки происходят реально; тогда то, что они делают с функцией, переданной им в качестве второго аргумента, зависит от конкретной монады.
В случае «Может быть» и «Либо», когда привязкам передается аргумент Nothing или Left x, затем второй аргумент игнорируется.
Тем не менее, в этих конкретных двух случаях мне интересно, есть ли снижение производительности при выполнении подобных действий
justPlus1 = Just . (+1)
turnToNothing = const Nothing
Just 3 >>= turnToNothing >>= justPlus1
>>= justPlus1
>>= justPlus1
>>= justPlus1
>>= justPlus1

поскольку в этих случаях цепочка на самом деле не может делать ничего, кроме того, что она делает, учитывая, что
Nothing >>= _ = Nothing
Left l >>= _ = Left l


Подробнее здесь: https://stackoverflow.com/questions/639 ... erformance
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»