![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Basic ConceptsBoost , ,
Все является функцией (актером класса) в рамках Феникса, которая может быть оценена как f(a..n), где n — это аритмия функции, или количество аргументов, которые ожидает функция. Операторы также выполняют функции. Например, a + b — это просто функция с arity == 2 (или двоичная). a + b - это то же самое, что плюс (a, b), a + b + c - это то же самое, что плюс (плюс (a, b), c). plus (плюс (a, b), c) - это троичная функция (arity == 3). Забавно, что даже функции возвращают функции. Посмотрим, что это значит за короткое время. Карри, названный в честь знаменитого ЛогикаХаскеллКарри является одним из важных механизмов в дисциплине программирования, известной как функциональное программирование. Существует много теорий, окружающих концепции, стоящие за ним, однако, в самом простом термине, можно с уверенностью предположить, что функция более или менее похожа на частичную оценку функции. Возьмем простую псевдофункцию C++:
Например. Полная оценка функции «плюс» выше осуществляется путем подачи аргументов для x и y. Например:
Мы получим 5. С другой стороны, частичную оценку можно рассматривать как вызов функции, не приводя всех аргументов. Вот пример воображаемого (не C++):
Что это означает и каков результат функции? Во-первых, вопросительный знак заявляет, что у нас еще нет этого аргумента, пусть это будет представлено позже. Но есть и второй аргумент – 6. Теперь, в то время как полностью оцененная функция плюс (3, 2) приводит к фактическому вычисленному значению 5, частично оцененная функция плюс (?), 6) приводит к другой (неназванной) функции (функции более высокого порядка). В FP неназванная функция называется лямбда-функцией, на этот раз лямбда-функция ожидает одного меньшего аргумента:
Теперь мы можем использовать unnamed_f_x_plus_6, который является результатом выражения plus(?, 6) как функция с одним аргументом. Таким образом:
Это можно понимать как:
То же самое можно сделать с операторами. Например, приведенный выше пример эквивалентен:
Очевидно, что частичная оценка функции плюса, как мы видим выше, не может быть выполнена непосредственно на C++, где мы должны предоставить все аргументы, которые ожидает функция. Проще говоря, сканирование функции плюс невозможно в прямом C++. Вот где появляется структура Феникса. Эти рамки обеспечивают возможности для проведения частичной оценки функций.
Copyright © 2001-2002 Joel de Guzman Статья Basic Concepts раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
|||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |