Y-Combinator практический пример

Если вы напечатаете результат вызова resume, вы увидите что-то вроде false attempt to yield across a C-call boundary, поэтому выполнение завершится неудачно, так как вы пытаетесь yield из ловушки отладки, что вы не можете сделать (вы нужно будет вернуться с отладочного крючка). Вы можете resume из ловушки отладки в другую сопрограмму и уступить оттуда, но вы не можете уступить из ловушки.

Может быть, может быть рекомендовано другое решение, если вы объясните, что вы пытаетесь сделать (в редакции).

37
задан onedozenbagels 15 May 2009 в 15:54
поделиться

4 ответа

Я не согласен с другими ответами: Комбинатор с фиксированной точкой (Y) имеет практическое применение , но требует очень образный ум, чтобы найти их. Как Брюс Макадам. Вот отрывок из его статьи That About Wraps it :

Комбинатор Y для вычисления фиксированных точек может быть выражен в стандартном ML. Он часто используется в качестве примера возможностей функций высшего порядка, но обычно не рассматривается как полезная программная конструкция. Здесь мы рассмотрим, как метод программирования, основанный на комбинаторе Y и оболочках, может дать программистам такой уровень контроля над внутренней работой функций, который иначе был бы невозможен без переписывания и перекомпиляции кода. В качестве эксперимента алгоритм вывода типа W реализован с использованием этого метода, так что сообщения об ошибках создаются с минимальным вмешательством в алгоритм. Код для этого примера программы демонстрирует подлинную полезность концепций и легкость их применения. Также обсуждается ряд других методов реализации и возможных приложений, включая использование функций высшего порядка для моделирования использования исключений и продолжений.

Это отличная статья; любой, кто интересуется функциональным программированием, вероятно, получит удовольствие от чтения.

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

Это отличная статья; любой, кто интересуется функциональным программированием, вероятно, получит удовольствие от чтения.

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

Это отличная статья; любой, кто интересуется функциональным программированием, вероятно, получит удовольствие от чтения.

27
ответ дан 27 November 2019 в 04:58
поделиться

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

Иногда было бы неплохо иметь этот комбинатор под программным управлением, делать то же самое, что и аспектно-ориентированное программирование (запоминание, трассировка, ...), но ни один язык программирования, который я знаю, не позволяет этого. Вероятно, большую часть времени это было бы слишком громоздко и / или слишком сложно выучить.

4
ответ дан 27 November 2019 в 04:58
поделиться

Вы можете проверить этот отличный пост о реализации Y Combinator на C #: Рекурсивные лямбда-выражения , это может помочь вам лучше понять идею.

Вы можете почитать несколько хороших статей в Википедии: Комбинатор с фиксированной точкой и Теоремы с фиксированной точкой

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

7
ответ дан 27 November 2019 в 04:58
поделиться

Другие могут поправить меня, если я ошибаюсь, но я почти уверен, что комбинатор Y строго академический. Подумайте об этом: чтобы реализовать это, ваш язык должен поддерживать функции высшего порядка, но не рекурсию. Я знаю только один такой язык: лямбда-исчисление.

Так что, пока наши машины не переключатся с машин Тьюринга на работу на лямбда-исчислении, Y-комбинатор будет строго академическим.

Примечание: другие функциональные методы, связанные с Y-комбинатором. полезны, так что продолжайте. Понимание комбинатора Y поможет вам понять продолжения, ленивое вычисление и т. Д.

3
ответ дан 27 November 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: