Не удалось найти слово «Monad
», когда я искал книгу SICP 2nd Edition. Какая концепция (или главы) SICP относится к Монаде?Monad and Структура и интерпретация компьютерных программ
ответ
Ничто в SICP явно не содержит моноды: книга была написана задолго до того, как кто-либо формализовал концепцию монады, относящейся к компьютерному программированию (игнорируя здесь математическую идею монады, а это другая вещь). Но некоторые вещи в книге все равно монадичны: списки, например, являются монадой, знаете ли вы это или нет.
Есть ли альтернативная книга, которая охватывает последние исследования, в том числе монады? Можете ли вы обновить ответ yur, если он есть. – coder000001
SICP использует схему. Схема позволяет совершать произвольные действия вместе. Ничто не мешает вам это сделать. Другими словами, вы в основном работаете в монаде-до-ничего. Кроме того, они, как правило, не являются такими полезными или идомальными в языке с несколькими парадигмами, как Lisp (тем самым, я имею в виду, что Scheme не принимает сторон, это своего рода мутация, которая делает их табу с суффиксом «!»).
В Haskell вы пишете программы, где типы ограничивают действия, которые могут возникать внутри указанной функции. Создание экземпляра monadic позволяет создавать функции с некоторыми ограничениями (по типу, а также с законами монады, о которых должен заботиться программист). И вы можете складывать эффекты с помощью трансформаторов.
Итак, монады не так полезны в языковых настройках, как схема. И, как справедливо сказал Амалуа, они были изобретены тогда.
РЕДАКТИРОВАТЬ 1: Прояснение первого абзаца. У вас могут быть монады в Lisp (нечистый язык), просто у вас нет системы типов, следя за тем, чтобы вы не смешивали эффекты. Я использовал IO
в монаде (Racket + functional/better-monads). Тем не менее, дизайн модели монады может быть весьма полезен, как то, как Maybe
и List
используются в Clojure/Racket, как указал Алексис Кинг.
EDIT 2: Для таких вещей, как State и ST (которые, вероятно, вы видите в большинстве случаев использования, поскольку многие (большинство?) Алгоритмов используют возможность изменения), монады на самом деле не имеют большого смысла. Кроме того, как я уже указывал, вы не получаете гарантий, которые вы ожидаете от Haskell в большинстве Lisps.
-1, в то время как Haskell использует монад для ввода-вывода, монада «IO» - единственная «волшебная» монада, и много монад полезно даже в Схеме. Модификация Maybe, например, пробилась в Clojure в виде 'some->'. Ваш ответ не ошибочен (существует множество причин, по которым схема не использует монады как абстракцию), но первый абзац является плохим аргументом и немного вводит в заблуждение. –
Мне показалось, что я упоминал Схему, а не Clojure (что сильно зависит от FP, но я не знаю много об этом, кроме статьи wiki). Тем не менее, Scheme (ну, Racket) позволяет вам иметь несколько эффектов в монаде. Я попробовал смешивать операции ввода-вывода в монаде списка, который также выполняет IO. Таким образом, это не настоящая монада, как в Haskell (тип sigs не соответствует). Тем не менее, я признаю, что этот стиль композиции может быть весьма полезен и на Схеме (хотя я видел, что, возможно, можно действовать в любом месте. – Akaberto
- 1. Структура и интерпретация компьютерных программ, какой уровень математики требуется?
- 2. Какая черта «Структура и интерпретация компьютерных программ» обрисовывает рисунок?
- 3. Структура программ?
- 4. Scalaz Writer Monad and filterM
- 5. Haskell parser, Monad and MonadPlus
- 6. Структура рубиновых программ
- 7. haskell state monad in function and argument
- 8. Haskell Monad Transformer Stack and Type Signatures
- 9. Понимание Purescript Eff Monad and do blocks
- 10. Monad transformers monad duplication
- 11. Выполнение экземпляра оболочки monad monad класса Monad
- 12. Биты и байты компьютерных наук
- 13. State monad и gtk2hs
- 14. Результат monad in monad transformer
- 15. Интерпретация декодирования vs Резьбовая интерпретация
- 16. Monad Трансформаторы и функция подъема
- 17. Автоматический выбор переводчика через Free Monad and Coproduct
- 18. Monad "unboxing"
- 19. Использование и интерпретация Sigaction
- 20. Как использовать IO Monad в другой Monad
- 21. Изучение Happstack и Monad Transformers
- 22. Либо Monad и Исключительные случаи
- 23. Интерпретация Javascript от Python
- 24. преонной интерпретация перечисления и отображение
- 25. Таксономия компьютерных наук
- 26. IP-адреса компьютерных сетей
- 27. Взлом компьютерных сетей
- 28. Модели в компьютерных сетях
- 29. Интерпретация кода
- 30. Список слов компьютерных наук
Eugenio Moggi впервые описал общее использование монадов для структурирования программ в 1991 году. SICP был опубликован в 1984 году. – molbdnilo
Спасибо, Но я имел в виду второе издание, которое появилось в 2005 году, я обновил вопрос. – coder000001
Второе издание было опубликовано в июле 1996 года. Монадские I/O - первые «широко распространенные» монады - появились в Haskell в мае 1996 года. Монады не стали широко известны до 21-го века. – molbdnilo