Cтраница 1
Квалифицированные выражения обычно используют, когда внутри какого-либо выражения на подвыражение ссылаются более одного раза, но оно может также использоваться для того, чтобы было легче читать определение функции. Третий случай применения квалифицированного выражения относится к декомпозиции кортежей. В качестве примера рассмотрим приведенную ранее функцию IntDivr Каждый ее вызов возвращает пару чисел - частное и остаток от деления двух аргументов. [1]
Если образец в квалифицированном выражении оказался несопоставленным, то вычисляется выражение после ключевого слова otherwise, которое является необязательным. [2]
Мы часто говорим, что квалифицированные выражения расширяют текущий контекст, отражая тот факт, что их вычисление приводит к включению дополнительной связи в контекст. [3]
Как увидим позднее, обработка квалифицированных выражений и - выражений очень похожа на обработку определений этого сорта. [4]
И наконец, мы подходим к квалифицированным выражениям, для которых сначала рассмотрим простейший, нерекурсивный случай. [5]
За исключением определений функций, - выражений и квалифицированных выражений ( let - и where - выражений), где используется сопоставление с образцом, все остальные выражения языка Норе транслируются непосредственно в промежуточный код. [6]
Теперь рассмотрим выражение letrecxi et in е, в котором в единственное рекурсивно описанное квалифицированное выражение ei переменная Xj входит по крайней мере один раз. В графе, генерированном для е, обращение к xj может происходить через измененный контекст, как и в нерекурсивном случае. Однако так как ei благодаря Xj содержит ссылки на саму себя, то и граф для ej также должен содержать соответствующие указатели на свою вершину редекса. Для построения подобного графа необходима генерация несколько своеобразного кода. [7]
Такая возможность возникает при построении графов, представляющих применение определенных пользователем функций и рекурсивных квалифицированных выражений. Соответствующие последовательности кодов оканчиваются инструкцией UPDATE т, где т О, что привей дит к тому, что любая вершина, созданная предыдущей инструкн цией, становится недоступной, а ее содержимое копируется в ка кую-либо вершину редекса где-нибудь в графе. [8]
Это приводит нас к окончательному правилу для Т, работающему также в случае рекурсивных квалифицированных выражений. [9]
Перед тем как в следующем разделе формально определить систему вывода типов, покажем, как обрабатываются рекурсивные квалифицированные выражения. [10]
Теперь, когда мы знаем, как транслируется сопоставление с образцом в общем множестве определений, можем определить правила трансляции для квалифицированных выражений и лямбда-выражений. [11]
Квалифицированные выражения обычно используют, когда внутри какого-либо выражения на подвыражение ссылаются более одного раза, но оно может также использоваться для того, чтобы было легче читать определение функции. Третий случай применения квалифицированного выражения относится к декомпозиции кортежей. В качестве примера рассмотрим приведенную ранее функцию IntDivr Каждый ее вызов возвращает пару чисел - частное и остаток от деления двух аргументов. [12]
Здесь мы основываемся на том факте, что аргументы функции вычисляются не более 1 раза ( это станет более ясным из гл. Второй способ заключается в использовании так называемого квалифицированного выражения, оно позволяет нам присвоить выражению имя и затем использовать это имя так же, как мы используем формальный параметр. [13]
Представление факториала с помощью комбинаторного графа. [14] |
В частности, если функция F определена без использования квалифицированных выражений в виде f ( x) E, где Е - это выражение, содержащее вхождение f, тогда f является наименьшей фиксированной точкой - выражения Kf. Таким образом, f имеет эквивалентное комбинаторное выражение У [ f ] [ х ] comb ( Е), так как comb ( У) У. [15]