Практическое применение лыжного исчисления и BCKW

StackOverflow https://stackoverflow.com/questions/3689347

Вопрос

Я могу понять, как создать и подумать о Ski и BCKW Calculus, но я никогда не смогу найти практическое использование. Может быть, я не выгляжу достаточно глубоко? То есть интересно ли (только пример, пожалуйста, я не подразумеваю это верно) Java Servelets Ectsivity Ectensiance и Python Generators являются примером BCW, и я просто не могу видеть через лес деревьев?

Это было полезно?

Решение

В Haskell они где угодно!

  • Преступность является <$>
  • Слияние является flip
  • K. является pure
  • я является id
  • С является <*>
  • Варенье является join

С точки зрения Haskell, <$> означает «сделать в контексте».

  • (+2) <$> (*3) означает добавить два После умножения на три.
  • (+2) <$> [1,2,3] означает добавить два к каждый элемент в списке.
  • (+2) <$> (read . getLine) означает добавить два к номер я только что прочитал.
  • (+2) <$> someParser означает добавить два к Номер, который я просто проанализировал.

Вещи, которые имеют контекст, называются функторы. Отказ Все ваши итераторы Java / Python / C ++ являются просто странными версиями функций функторов.

Другое соединение: комбинатор S и K вместе - завершены. В хаскелл, pure а также <*> вместе образуют заявитель Функтор.

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

Другие советы

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

Мы видим приложения на определенные языки (например, Радость а также Кот). Я однажды Опубликовано на лямбда-the-ultimate.org. О отношениях SK Calculus для кота и радости.

Для чего стоит: BCKW и лыж (или SK) Calculi практически идентичны, но база BCKW выпала из моды.

Хотя лямбда и лыжный исчисление не отражает входные и выходные системы большинства языков программирования (таких как графика, сетевые соединения или, возможно, даже стандартные входные и вывода), способ структурирования практического компьютерного программирования соответствует lambda (и, следовательно, лыжам и BCKW), такой как идея рекурсии и несколько способов функций. Многие из этих языков программирования имеют лямбда абстракции для использования в качестве функций.

Это все о контроле.

Может быть, начните на более низком уровне. Применительная система - это просто система, в которой объекты могут быть применены к другим объектам. Простой пример применительной системы - это Bash. Ls |. Больше можно предположить, что они находятся в некоторой среде, и что вышеупомянутые средства делают Ls на окружающую среду, затем сделать больше. В применительном обозначателе это больше @ (ls @ окружающая среда), однако, можно сделать более сложные вещи, такие как Ls | Grep Pattern |. Более того, теперь в применительном обозначении это больше @ ((GREP @ Pattern) @ (Ls @ Environment)). Обратите внимание на grep @ pattern. GREP применяется к узору, которая возвращает программу, чтобы соответствовать этой картине в результате Ls. Это точка приложения, применять программу к аргументам, создавая новые программы из программ «Atomic» (AKA встроенные) программ. Однако мы не можем сделать слишком много программирования только с примитивным применением или встроенным. Нам нужен способ структурирования нашего ввода и применения наших примитивов нашему вводу.

Это где лямбда приходит. Использование лямбда можно обобщить (grep @ pattern) для применения grep на любой вход (grep @ x), однако, у нас должен быть способ получить вход в Greep. Таким образом, мы обычно используем функции. f (x) = grep @ x Вышеуказанный процесс называется абстрагированием аргумента. Но нет оснований думать о имени f как особенным, поэтому у нас есть синтаксис для него: лямбда х. grep @ x Тогда лямбда x. grep @ x, может быть нанесен на вход, а вход будет заменен в корпус и оцениваться. Однако замена может быть грязным, связанные переменные могут быть неприятными для реализации на машине. Лыжные (или b, c, k, w) дают способ выполнять лиц кабду без замены, а вместо этого просто обмениваться приложениями.

Для Recap приложение - это то, о чем это все. Очень удобно для рассуждения на уровне применения программы к чему-то (возможно, другой программе). Лямбда исчисления дает способ структурирования ввода и применения программ к аргументам. Лыжи дает возможность сделать лямбда, не имея некорректно заменителя.

Следует отметить, что лыжное сокращение по своей природе лениво, поэтому некоторое внимание может потребоваться в реальном мире использования лыж на структуру. Действительно, аргументы теперь могут быть полностью оценены и могут быть частичными приложениями. Можно обойти это с теорией типа и только оценить программу на его входе, если программа находится в положении головки приложения. Т.е. если один пишет с закрытыми условиями лямбда, переведен на лыжи, то если p @ aRg1 @ .... Это должен быть тот случай, если p предпристративно программа, то переписывание завершено, и поэтому все аргументы 1 ) Доступно, 2) полностью оценивается. Тем не менее, я не доказал это, и это не может быть правдой с достаточно сильным типом теории ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top