Большинство людей думают об инкубаторе стартапов, когда слышат Y-Combinator. Однако мало кто знает, что это также концепция функционального программирования, которая позволяет вам реализовать рекурсию на языке, который не обязательно поддерживает ее изначально. И хотя есть множество объяснений, которые говорят вам как это работает или как это получить, мало кто интуитивно понимает, какое это имеет отношение к инкубации стартапов.
Объяснение, данное на сайте FAQ Y-combinator, хоть и технически правильное, но упускает много тонкостей и глубины.
Почему вы выбрали название «Комбинатор Y»?
Комбинатор Y — одна из самых крутых идей в информатике. Это также метафора того, что мы делаем. Это программа, которая запускает программы; мы компания, которая помогает создавать компании.
Надеюсь, представив интуитивное представление о том, что он делает, и связав его с несколькими концепциями, не связанными с информатикой, я смогу показать, насколько это интересно.
Что оно делает
Y-комбинатор, по сути, является методом обхода ограничения функции не, которая не может ссылаться на себя, т. е. язык не поддерживает рекурсию.
Примером может служить эта факториальная функция в Javascript. Поскольку функция factorial
ссылается на себя, это не разрешено.
В настоящее время это не очень полезный инструмент для большинства программистов, поскольку невозможность просто использовать рекурсию не является распространенной проблемой.
Однако интересна абстрактная версия проблемы самореференции. Другими словами, вы можете сформулировать ограничение как:
«Как самость использует себя, если я не может ссылаться на себя?»
«Как безымянное становится именным?»
Или более практично:
«Как вы себя настраиваете?»
Понимание подхода, который Y-комбинатор использует для решения проблемы рекурсии, также косвенно помогает нам понять эти более поэтичные и прагматичные вопросы.
Y-комбинатор в двух словах
Первое, что нужно знать о Y-комбинаторе, это то, что его можно реализовать только в тех языках, где функции являются первоклассными гражданами и имеют возможность сами возвращать функции. Другими словами, функции должны иметь возможность делать то, что делает другое.
Вот пример, показывающий частичное приложение в Javascript. Прежде чем продолжить, убедитесь, что вы понимаете, как функции строят функции в этом примере.
Как только мы поймем вышеизложенное, мы сможем перейти к ядру Y-комбинатора. Способ написать функцию factorial
без ссылки на себя состоит в том, чтобы создать функцию, которая возвращает функцию, а затем немедленно вызвать ее, передав свою копию.
Вот более аннотированный пример.
И это все! Суть Y-комбинатора заключается в объединении в цикл двух анонимных функций для получения одинакового эффекта рекурсии. Поскольку функция не может указывать на себя через имя, она указывает на «отражение» или «копию», которая затем указывает обратно!
Это невероятно красиво, о чем я расскажу позже.
Это то, что я считаю сущностью Y-комбинатора. Это не слишком глубоко, например, мы на самом деле не создаем Y-комбинатор, но ссылки, приведенные вверху, обеспечивают гораздо большую строгость и глубину, если вам интересно. Я также приведу шаги вывода Y-комбинатора внизу, но в основном это синтаксический сахар и выделение Y-комбинатора как универсального инструмента.
Основное понимание заключается в том, как самореализация происходит посредством размышлений.
Подразумеваемое
Зуб не может себя укусить, рука не может себя чувствовать, глаз не может себя видеть. Все может реализовать «себя» только посредством метода отражения, такого как глаз, смотрящий на глаз в зеркале, или взаимодействия с миром, такого как зуб, имеющий представление о собственной твердости из-за различных вещей, которые он кусает.
Это работает аналогично человеческому столу. Налагая на кого-то, кто ложится на кого-то, кто ложится на кого-то в цепочке, которая в конечном итоге ведет обратно к вам, в конечном итоге вы косвенно поддерживаете себя, несмотря на то, что не можете сделать это напрямую.
Таким образом, Y-комбинатор позволяет функциям самореализоваться так же, как YC как инкубатор позволяет самореализоваться стартапам. Путем использования я в качестве входных данных окольными путями. , вы создаете странную петлю и, таким образом, степень самосознания.
Конечно, это возможно только в средах, где функции могут делать то, что делает другое. Если такие функции более высокого порядка невозможны, Y-комбинатор бесполезен.
Например, большие иерархии часто создают культуры, в которых функции более высокого порядка не нравятся из-за отсутствия предсказуемости и контроля. Люди, как и ожидалось, должны делать только одну вещь, иначе сложный механизм нельзя будет контролировать.
Однако у стартапов нет существующей идентичности, которой нужно управлять или защищать. Они должны самореализоваться или «умереть». Если стартап по-настоящему не доверяет своим сотрудникам и не делегирует им полномочия, он отказывается от шанса действительно стать живым существом и вместо этого становится мертвой машиной, шатающимся зомби, насмехающимся над подобием жизни, или вирусом, размножающимся без мысли и причины.
"Как сам использует себя, если сам не может ссылаться на себя?"
Вы используете отражения окружающей среды. Чем больше вы наблюдаете, тем больше вы можете понять, кто вы есть, и с помощью этого знания вы сможете использовать себя. Хотя вы никогда не сможете найти или создать «истинное отражение».
"Как вы настраиваете себя?"
Доверяйте и делегируйте. Вы не можете взять себя в руки, но если вы можете помочь и доверять другим, они помогут и поверят вам. Поднимите волну, чтобы поднять себя. Будьте открыты для счастливой случайности, вдохновляя других. Не контролируйте ситуацию до такой степени, чтобы единственные сюрпризы, которые могут случиться, были неприятными сюрпризами. Создайте среду, в которой возможна функциональность более высокого порядка, будь то ваша собственная жизнь или жизнь компании.
"Как безымянный становится названным?"
Назвать вещь не значит знать вещь. Знать вещь — значит называть вещь. Чтобы узнать вещь, которая уже названа, вы должны сначала переименовать ее, чтобы начать процесс ее познания. Самоактуализация — это то же самое, что самореализация.
Дополнительный
Вот полный вывод функции Y-комбинатора, который примерно соответствует post здесь.