Подтвердить что ты не робот

Практическое применение "Бананов, линз, конвертов и колючей проволоки"?

Прежде всего, название goofy напрямую ссылается на эту статью:

http://eprints.eemcs.utwente.nl/7281/01/db-utwente-40501F46.pdf

Я понимаю теоретическое значение этого, поскольку он моделирует большинство, если не все, семантику программирования.

Какие проблемы наиболее эффективно и практически решаются с помощью парадигмы программирования, основанной на этом? Какие проблемы нет?

Представьте, что все программы написаны там, где 80% всей логики связаны с этими операторами. Интересно, может ли язык, который заставил операторов на пользователе использовать их структуру...

4b9b3361

Ответ 1

Эта статья является одной из длинной серии связанных теоретических исследований. Область исследований - это то, что функциональные программисты называют общим программированием (которое смутно отличается от того, что программисты на С++ называют общим программированием). Идея заключается в том, что вы пишете свои функции таким образом, чтобы , когда вы определяете новый тип данных, вы автоматически получаете новый код для этого. Классической проблемой, которую люди хотели бы решить таким образом, является запись изображения данных на диск и последующее считывание изоморфных данных с образа диска.

Если вы хотите почувствовать практическое применение этих идей, я рекомендую Ralf Hinze отличную статью Generics for the Masses, которая показывает, как вы можете попробовать все эти дурацкие идеи в простой старой Haskell. Например, я использовал эти методы для реализации замещения, избегающей замещения для очень сложных промежуточных языков внутри компиляторов.

Ральф написал ряд хороших статей по родовому программированию, как и Джереми Гиббонс. Их материал не так далеко, как бананы, линзы и т.д.

Ответ 2

Это означает, что решения, которые могут быть смоделированы в одной парадигме, также могут быть смоделированы в другом, и что их можно программно преобразовать в другое.

Теперь некоторые проблемы легче решить в одной парадигме, чем в другой. Кроме того, легче доказать свойства в одной парадигме, чем в другой. Поэтому, если вы можете показать такую ​​эквивалентность, вы открываете дверь для решения определенных проблем в более простой ситуации, а затем преобразовываете решение в желаемую парадигму.

Это похоже на monads thingy. Большое дело в монадах - это не то, как вы пишете. Большое дело в них состоит в том, что существует множество теорем о монадах, которые могут быть применены после того, как вы уменьшите свою проблему до монады. Здесь применяется тот же принцип.