Выражение «let» также может быть определено в математике, где оно связывает логическое условие с ограниченной областью действия.
Выражение «let» можно рассматривать как лямбда-абстракцию, применяемую к значению. В математике выражение let также можно рассматривать как соединение выражений внутри квантора существования , который ограничивает область действия переменной.
Выражение let присутствует во многих функциональных языках, чтобы обеспечить локальное определение выражения для использования при определении другого выражения. Выражение let присутствует в некоторых функциональных языках в двух формах; пусть или «дайте запись». Let Rec — это расширение простого выражения let, которое использует комбинатор с фиксированной точкой для реализации рекурсии .
Даны Скотт Язык LCF [1] был этапом в эволюции лямбда-исчисления в современные функциональные языки. В этом языке появилось выражение let, которое с тех пор появилось в большинстве функциональных языков.
Императивные языки с сохранением состояния, такие как АЛГОЛ и Паскаль, по существу реализуют выражение let для реализации ограниченного объема функций в блочных структурах. [ нужна ссылка ]
Близко связанное предложение « where » вместе с его рекурсивным вариантом « where Rec » появилось уже в Питера Ландина книге «Механическая оценка выражений » . [4]
Выражение «let» определяет функцию или значение для использования в другом выражении. Это не только конструкция, используемая во многих функциональных языках программирования, но и конструкция естественного языка, часто используемая в математических текстах. Это альтернативная синтаксическая конструкция для предложенияwhere.
Пусть выражение
Где пункт
Позволять
и
в
где
и
В обоих случаях вся конструкция представляет собой выражение, значение которого равно 5. Как и в случае if-then-else, тип, возвращаемый выражением, не обязательно является логическим.
Выражение let существует в 4 основных формах:
Форма
И
Рекурсивный
Определение/ограничение
Описание
Простой
Нет
Нет
Определение
Простое нерекурсивное определение функции.
Рекурсивный
Нет
Да
Определение
Определение рекурсивной функции (реализуется с помощью Y-комбинатора ).
Взаимный
Да
Да
Определение
Определение взаимно рекурсивной функции.
Математический
Да
Да
Ограничение
Математическое определение, поддерживающее общее логическое условие let.
В функциональных языках выражение let определяет функции, которые могут быть вызваны в выражении. Область действия имени функции ограничена структурой выражения let.
В математике выражение let определяет условие, которое является ограничением выражения. Синтаксис также может поддерживать объявление экзистенциально квантифицированных переменных, локальных для выражения let.
Терминология, синтаксис и семантика варьируются от языка к языку. В Scheme let let используется для простой формы, а Rec — для рекурсивной формы. В ML let отмечает только начало блока объявлений, а fun отмечает начало определения функции. В Haskell пусть может быть взаимно рекурсивным, и компилятор определяет, что необходимо.
Лямбда -абстракция представляет собой функцию без имени. Это источник несогласованности в определении лямбда-абстракции. Однако лямбда-абстракции могут быть составлены для представления функции с именем. В таком виде несоответствие устранено. Лямбда-член,
эквивалентно определению функции к в выражении , которое можно записать как выражение let ;
Выражение let можно понять как выражение естественного языка. Выражение let представляет собой замену значения переменной. Правило замены описывает последствия равенства как замены.
В математике выражение let описывается как соединение выражений. В функциональных языках выражение let также используется для ограничения области действия. В математике объем описывается кванторами. Выражение let — это союз внутри квантора существования.
где E и F имеют логический тип.
Выражение let позволяет применить замену к другому выражению. Эту замену можно применять в ограниченной области, к подвыражению. Естественное использование выражения let применяется к ограниченной области действия (так называемое удаление лямбда-выражений ). Эти правила определяют, как может быть ограничена область действия;
где F не имеет типа Boolean . Из этого определения можно вывести следующее стандартное определение выражения let, используемое в функциональном языке.
Для простоты маркер, определяющий экзистенциальную переменную, , будет опущено в выражении, если это ясно из контекста.
Чтобы получить этот результат, сначала предположим, что
затем
Используя правило замены,
так что для всех L ,
Позволять где K — новая переменная. затем,
Так,
Но из математической интерпретации бета-редукции,
Здесь, если y является функцией переменной x, это не тот же самый x, что и в z. Возможно применение альфа-переименования. Итак, мы должны иметь,
так,
Этот результат представляется на функциональном языке в сокращенной форме, где смысл однозначен;
Здесь переменная x неявно признается как частью уравнения, определяющего x, так и переменной в кванторе существования.
Никакого подъема из логического значения [ править ]
Противоречие возникает, если E определяется формулой . В этом случае,
становится,
и используя,
Это неверно, если G ложно. Чтобы избежать этого противоречия, F не может иметь логический тип. Для логического значения F правильная формулировка правила отбрасывания использует импликацию вместо равенства:
Может показаться странным, что к логическим значениям применяются другие правила, чем к другим типам. Причина этого в том, что правило,
применяется только в том случае, если F является логическим. Сочетание двух правил создает противоречие, поэтому, если одно правило выполняется, другое — нет.
Пусть выражения могут быть определены с несколькими переменными,
тогда его можно вывести,
так,
Законы, связанные с лямбда-исчислением выражениями let и
Сокращение Eta дает правило для описания лямбда-абстракций. Это правило вместе с двумя полученными выше законами определяет связь между лямбда-исчислением и выражениями let.
Имя
Закон
Эта-редукционная эквивалентность
Let-лямбда-эквивалентность
(где это имя переменной.)
Пусть комбинация
Пусть определение определено из лямбда-исчисления [ править ]
Чтобы избежать потенциальных проблем, связанных с математическим определением , Дана Скотт изначально определила выражение let из лямбда-исчисления. Это можно рассматривать как восходящее или конструктивное определение выражения let , в отличие от нисходящего или аксиоматического математического определения.
Простое нерекурсивное выражение let было определено как синтаксический сахар для лямбда-абстракции, применяемой к термину. В этом определении
Затем определение простого выражения let было расширено, чтобы обеспечить возможность рекурсии с использованием комбинатора с фиксированной точкой .
Это представление может быть преобразовано в лямбда-терм. Лямбда-абстракция не поддерживает ссылку на имя переменной в прикладном выражении, поэтому x необходимо передать в качестве параметра x .
Используя правило эта-редукции,
дает,
Выражение let может быть выражено как лямбда-абстракция, используя:
дает,
Возможно, это самая простая реализация комбинатора с фиксированной запятой в лямбда-исчислении. Однако одно бета-уменьшение дает более симметричную форму Y-комбинатора Карри.
Затем этот подход обобщается для поддержки взаимной рекурсии. Взаимно рекурсивное выражение let может быть составлено путем перестановки выражения для удаления любых условий и. Это достигается путем замены нескольких определений функций одним определением функции, которое устанавливает список переменных, равный списку выражений. Версия комбинатора Y, называемая Y *. поливариатическим комбинатором с фиксированной точкой [5] затем используется для одновременного вычисления фиксированной точки всех функций. Результатом является взаимно рекурсивная реализация выражения let .
Выражение let может использоваться для представления значения, которое является членом набора.
При применении функции одного выражения let к другому,
Но для применения выражения let к самому себе применяется другое правило.
Простого правила объединения значений не существует. Требуется общая форма выражения, представляющая переменную, значение которой является членом набора значений. Выражение должно быть основано на переменной и наборе.
Применение функции, примененное к этой форме, должно дать другое выражение в той же форме. Таким образом, любое выражение для функции нескольких значений можно рассматривать так, как если бы оно имело одно значение.
Недостаточно, чтобы форма представляла только набор значений. Каждое значение должно иметь условие, определяющее, когда выражение принимает значение. Результирующая конструкция представляет собой набор пар условий и значений, называемый «набором значений». См. сужение наборов алгебраических значений .
Правила преобразования между лямбда-исчислением и выражениями let [ править ]
Будут даны метафункции , описывающие преобразование между лямбда-выражениями и выражениями let . Метафункция — это функция, которая принимает программу в качестве параметра. Программа — это данные для метапрограммы. Программа и метапрограмма находятся на разных метауровнях.
Следующие соглашения будут использоваться для того, чтобы отличить программу от метапрограммы:
Квадратные скобки [] будут использоваться для обозначения применения функции в метапрограмме.
Для переменных в метапрограмме будут использоваться заглавные буквы. Строчные буквы обозначают переменные в программе.
будет использоваться для равенства в метапрограмме.
Для простоты первое правило учитывает совпадения. Правила также предполагают, что лямбда-выражения были предварительно обработаны, поэтому каждая лямбда-абстракция имеет уникальное имя.
Также используется оператор замены. Выражение означает замену каждого вхождения G в L на S и возврат выражения. Используемое определение расширено и включает замену выражений из определения, данного на странице лямбда-исчисления . Сопоставление выражений должно сравнивать выражения на альфа-эквивалентность (переименование переменных).
Преобразование из лямбда-выражений в let [ править ]
Следующие правила описывают, как преобразовать лямбда-выражение в выражение let без изменения структуры.
Правило 6 создает уникальную переменную V в качестве имени функции.
Эти правила отменяют описанное выше преобразование. Они преобразуют выражение let в лямбда-выражение без изменения структуры. Не все выражения let можно преобразовать с использованием этих правил. Правила предполагают, что выражения уже упорядочены так, как если бы они были сгенерированы de-lambda .
В лямбда-исчислении не существует точного структурного эквивалента для выражений let , которые имеют свободные переменные, используемые рекурсивно. В этом случае требуется некоторое добавление параметров. Правила 8 и 10 добавляют эти параметры.
Правил 8 и 10 достаточно для двух взаимно рекурсивных уравнений в выражении let . Однако они не будут работать для трех и более взаимно рекурсивных уравнений. В общем случае требуется дополнительный уровень циклов, что немного усложняет метафункцию. Следующие правила заменяют правила 8 и 10 при реализации общего случая. Правила 8 и 10 оставлены, чтобы сначала можно было изучить более простой случай.
лямбда-форма — преобразует выражение в комбинацию выражений, каждое из которых имеет вид переменная = выражение .
...... где V — переменная.
lift-vars — Получите набор переменных, которым требуется X в качестве параметра, поскольку в выражении X является свободной переменной.
подпеременные — для каждой переменной в наборе замените ее на переменную, примененную к X в выражении. Это делает X переменной, передаваемой в качестве параметра, а не свободной переменной в правой части уравнения.
de-let — Устранить каждое условие в E , чтобы X не было свободной переменной в правой части уравнения.
^ «PCF — это язык программирования для вычислимых функций, основанный на LCF, логике вычислимых функций Скотта» ( Плоткин, 1977 ). Программирование вычислимых функций используется ( Mitchell 1996 ). Его также называют программированием с помощью вычислимых функций или языком программирования для вычислимых функций .
Arc.Ask3.Ru Номер скриншота №: 8b79fc9ebf836d6030cba3dfcad8de07__1701530220 URL1:https://arc.ask3.ru/arc/aa/8b/07/8b79fc9ebf836d6030cba3dfcad8de07.html Заголовок, (Title) документа по адресу, URL1: Let expression - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)