Языки программирования. Практический сравнительный анализ



Языки программирования. Практический сравнительный анализ - стр. 53


В  модели М определение композиции выглядит так:

       :{(f*g)e} -> :{(f) :{(g) e}}.

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

Вторая полезная форма - "общая аппликация" (применение указанной в аргументе функции ко всем непосредственным составляющим обрабатываемого выражения). Обозначим ее через "А" по аналогии с квантором всеобщности. Для ее определения через аппликацию в группу (апл) следует добавить два рефал-предложения

:{(Аf)t e} -> :{(f)t} :{(Аf)e}

:{(Аf)  } -> <>   .

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

Вопрос. Зачем понадобилось второе предложение?

Третья структурирующая форма - конструкция (ее обозначим запятой ","). Применить результат конструкции двух функций f и g к выражению e - значит получить конкатенацию  выражений f(e) и g{e}.

Определить конструкцию в модели М можно так.

:{(f,g) e} -> :{(f)e}  :{(g)e}   .

Еще один пример формы - редукция, которую обозначим через "/". Название, идея и обозначение восходят к Айверсону, автору языка Апл - одного из самых распространенных диалоговых языков. Своей исключительной лаконичностью этот язык в значительной степени обязан функциям высших порядков.

:{(/f) t1 t2 e} -> :{(f) t1 :{(/f) t2 e}}.

:{(/f) t} -> t.

Идея редукции в том, что бинарная операция f (двухместная функция) последовательно применяется, начиная с конца выражения вида (t1 t2 e) - т.е. выражения, в котором не меньше двух составляющих. Название этой формы подчеркивает, что обрабатываемое выражение сворачивается к одному терму (редуцируется) за счет последовательного "сьедания" пар компонент выражения, начиная с его конца.

Например, с помощью редукции можно определить функцию "сумма". 

 сумма{e} -> :{(/+) e}     .

Тогда  если считать, что бинарная операция "+" предопределена и ее можно использовать префиксным способом, получим




Содержание  Назад  Вперед