~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 8B79FC9EBF836D6030CBA3DFCAD8DE07__1701530220 ✰
Заголовок документа оригинал.:
✰ Let expression - Wikipedia ✰
Заголовок документа перевод.:
✰ Выражение Let — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Let_expression ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/8b/07/8b79fc9ebf836d6030cba3dfcad8de07.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/8b/07/8b79fc9ebf836d6030cba3dfcad8de07__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 19:31:14 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 2 December 2023, at 18:17 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Выражение Let — Википедия Jump to content

Пусть выражение

Из Википедии, бесплатной энциклопедии

В информатике выражение «let» связывает определение функции с ограниченной областью действия .

Выражение «let» также может быть определено в математике, где оно связывает логическое условие с ограниченной областью действия.

Выражение «let» можно рассматривать как лямбда-абстракцию , примененную к значению. В математике выражение let также можно рассматривать как объединение выражений внутри квантора существования , который ограничивает область действия переменной.

Выражение let присутствует во многих функциональных языках, чтобы обеспечить локальное определение выражения для использования при определении другого выражения. Выражение let присутствует в некоторых функциональных языках в двух формах; пусть или «дайте запись». Let Rec — это расширение простого выражения let, которое использует комбинатор с фиксированной точкой для реализации рекурсии .

История [ править ]

Даны Скотт Язык LCF [1] был этапом в эволюции лямбда-исчисления в современные функциональные языки. В этом языке появилось выражение let, которое с тех пор появилось в большинстве функциональных языков.

языков Схема , [2] ML и, в последнее время, Haskell [3] унаследовали выражения let от LCF.

Императивные языки с сохранением состояния, такие как ALGOL и Pascal, по существу реализуют выражение 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 также используется для ограничения области действия. В математике объем описывается кванторами. Выражение let — это союз внутри квантора существования.

где E и F имеют логический тип.

Выражение let позволяет применить замену к другому выражению. Эту замену можно применять в ограниченной области, к подвыражению. Естественное использование выражения let применяется к ограниченной области действия (так называемое удаление лямбда-выражений ). Эти правила определяют, как может быть ограничена область действия;

где F не имеет типа Boolean . Из этого определения можно вывести следующее стандартное определение выражения let, используемое в функциональном языке.

Для простоты маркер, определяющий экзистенциальную переменную, , будет опущено в выражении, если это ясно из контекста.

Вывод [ править ]

Чтобы получить этот результат, сначала предположим, что

затем

Используя правило замены,

так что для всех L ,

Позволять где K — новая переменная. затем,

Так,

Но из математической интерпретации бета-редукции,

Здесь, если y является функцией переменной x, это не тот же самый x, что и в z. Может применяться альфа-переименование. Итак, мы должны иметь,

так,

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

Здесь переменная x неявно признается как частью уравнения, определяющего x, так и переменной в кванторе существования.

Никакого подъема из логического значения [ править ]

Противоречие возникает, если E определяется формулой . В этом случае,

становится,

и используя,

Это неверно, если G ложно. Чтобы избежать этого противоречия, F не может иметь логический тип. Для логического значения F правильная формулировка правила отбрасывания использует импликацию вместо равенства:

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

применяется только в том случае, если F является логическим. Сочетание двух правил создает противоречие, поэтому, если одно правило выполняется, другое — нет.

Объединение выражений let [ править ]

Пусть выражения могут быть определены с несколькими переменными,

тогда его можно вывести,

так,

связанные с лямбда-исчислением и let Законы , выражениями

Сокращение Eta дает правило для описания лямбда-абстракций. Это правило вместе с двумя полученными выше законами определяет связь между лямбда-исчислением и выражениями let.

Имя Закон
Эта-редукционная эквивалентность
Let-лямбда-эквивалентность (где это имя переменной.)
Пусть комбинация

Пусть определение определено из лямбда-исчисления [ править ]

Чтобы избежать потенциальных проблем, связанных с математическим определением , Дана Скотт изначально определила выражение let из лямбда-исчисления. Это можно рассматривать как восходящее или конструктивное определение выражения let , в отличие от нисходящего или аксиоматического математического определения.

Простое нерекурсивное выражение let было определено как синтаксический сахар для лямбда-абстракции, применяемой к термину. В этом определении

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

Комбинатор с фиксированной точкой [ править ]

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

Это представление может быть преобразовано в лямбда-терм. Лямбда-абстракция не поддерживает ссылку на имя переменной в прикладном выражении, поэтому x необходимо передать в качестве параметра x .

Используя правило эта-редукции,

дает,

Выражение let может быть выражено как лямбда-абстракция, используя:

дает,

Возможно, это самая простая реализация комбинатора с фиксированной запятой в лямбда-исчислении. Однако одно бета-уменьшение дает более симметричную форму Y-комбинатора Карри.

Рекурсивное выражение let [ править ]

Рекурсивное выражение let , называемое «let Rec», определяется с помощью комбинатора Y для рекурсивных выражений let.

Взаимно рекурсивное выражение let [ править ]

Затем этот подход обобщается для поддержки взаимной рекурсии. Взаимно рекурсивное выражение let может быть составлено путем перестановки выражения для удаления любых условий и. Это достигается путем замены нескольких определений функций одним определением функции, которое устанавливает список переменных, равный списку выражений. Версия комбинатора Y, называемая Y *. поливариатическим комбинатором с фиксированной точкой [5] затем используется для одновременного вычисления фиксированной точки всех функций. Результатом является взаимно рекурсивная реализация выражения let .

Несколько значений [ править ]

Выражение let может использоваться для представления значения, которое является членом набора.

При применении функции одного выражения let к другому,

Но для применения выражения let к самому себе применяется другое правило.

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

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

Недостаточно, чтобы форма представляла только набор значений. Каждое значение должно иметь условие, определяющее, когда выражение принимает значение. Результирующая конструкция представляет собой набор пар условий и значений, называемый «набором значений». См. сужение наборов алгебраических значений .

Правила преобразования между лямбда-исчислением и выражениями let [ править ]

метафункции Будут даны , описывающие преобразование между лямбда- выражениями и выражениями let . Метафункция — это функция, которая принимает программу в качестве параметра. Программа — это данные для метапрограммы. Программа и метапрограмма находятся на разных метауровнях.

Следующие соглашения будут использоваться для того, чтобы отличить программу от метапрограммы:

  • Квадратные скобки [] будут использоваться для обозначения применения функции в метапрограмме.
  • Для переменных в метапрограмме будут использоваться заглавные буквы. Строчные буквы обозначают переменные в программе.
  • будет использоваться для равенства в метапрограмме.

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

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

Преобразование из лямбда-выражений в let [ править ]

Следующие правила описывают, как преобразовать лямбда-выражение в выражение let без изменения структуры.

Правило 6 создает уникальную переменную V в качестве имени функции.

Пример [ править ]

Например, комбинатор Y ,

преобразуется в,

Правило Лямбда-выражение
6
4
5
3
8
8
4
2
1

Преобразование let в лямбда-выражения [ править ]

Эти правила обращают вспять описанное выше преобразование. Они преобразуют выражение let в лямбда-выражение без изменения структуры. Не все выражения let можно преобразовать с использованием этих правил. Правила предполагают, что выражения уже упорядочены так, как если бы они были сгенерированы de-lambda .

В лямбда-исчислении не существует точного структурного эквивалента для выражений let , которые имеют свободные переменные, используемые рекурсивно. В этом случае требуется некоторое добавление параметров. Правила 8 и 10 добавляют эти параметры.

Правил 8 и 10 достаточно для двух взаимно рекурсивных уравнений в выражении let . Однако они не будут работать для трех и более взаимно рекурсивных уравнений. В общем случае требуется дополнительный уровень циклов, что немного усложняет метафункцию. Следующие правила заменяют правила 8 и 10 при реализации общего случая. Правила 8 и 10 оставлены, чтобы сначала можно было изучить более простой случай.

  1. лямбда-форма — преобразует выражение в комбинацию выражений, каждое из которых имеет вид переменная = выражение .
    1. ...... где V — переменная.
  2. lift-vars — Получите набор переменных, которым требуется X в качестве параметра, поскольку в выражении X является свободной переменной.
  3. подпеременные — для каждой переменной в наборе замените ее на переменную, примененную к X в выражении. Это делает X переменной, передаваемой в качестве параметра, а не свободной переменной в правой части уравнения.
  4. de-let Устранить каждое условие в E , чтобы X не было свободной переменной в правой части уравнения.

Примеры [ править ]

Например, выражение let, полученное из комбинатора Y ,

преобразуется в,

Правило Лямбда-выражение
6
1
2
3
7
4
4
5
1
2
3
4
5

В качестве второго примера возьмем расширенную версию Y-комбинатора :

преобразуется в,

Правило Лямбда-выражение
8
7
1, 2
7, 4, 5
1, 2

В качестве третьего примера перевод:

является,

Правило Лямбда-выражение
9
1
2
7
1
2

В качестве четвертого примера перевода:

является,

это знаменитый комбинатор y .

Правило Лямбда-выражение
9
2
7
1
2

Ключевые люди [ править ]

См. также [ править ]

Ссылки [ править ]

  1. ^ «PCF — это язык программирования для вычислимых функций, основанный на LCF, логике вычислимых функций Скотта» ( Плоткин 1977 ). Программирование вычислимых функций используется ( Mitchell 1996 ). Его также называют программированием с помощью вычислимых функций или языком программирования для вычислимых функций .
  2. ^ «Схема — переменные и выражения Let» .
  3. ^ Саймон, Марлоу (2010). «Отчет о языке Haskell 2010 — выражения Let» .
  4. ^ Ландин, Питер Дж. (1964). «Механическая оценка выражений» . Компьютерный журнал . 6 (4). Британское компьютерное общество : 308–320. дои : 10.1093/comjnl/6.4.308 .
  5. ^ «Простейшие поливариадические комбинаторы с фиксированной точкой для взаимной рекурсии» .

Цитируемые работы [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 8B79FC9EBF836D6030CBA3DFCAD8DE07__1701530220
URL1:https://en.wikipedia.org/wiki/Let_expression
Заголовок, (Title) документа по адресу, URL1:
Let expression - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)