Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Lazy functions

Boost , ,

Lazy functions

Когда происходит карриинг или частичная оценка функции, предоставление N фактических аргументов функции, которая ожидает M аргументов, где N < M приведет к функции более высокого порядка с аргументами M-N. Технически, когда N == M, функция имеет все аргументы, необходимые для полной оценки:

    plus(3, 2)  full evaluation
    plus(?, 6)  partial evaluation
Lazy functions are subsets of partial function evaluation or currying

Теперь мы вернемся к концепции ленивых функций, введенных ранее. То есть первая функция вызова не будет действительно "полностью оценить" функцию независимо от того, все или некоторые из аргументов поставляются. Для выполнения фактической оценки всегда потребуется вторая функция. В момент второго звонка абонент должен предоставить все аргументы, которые все еще отсутствуют. Все еще расплывчато? Для уточнения частично оцененной функции:

        f(1, ?, ?)

это приводит к неназванной функции unnamed_f(a, b), которая ожидает, что два (2) дополнительных аргумента, которые все еще отсутствуют, когда первая функция, f, вызывается. Поскольку неназванный f(a, b) уже является оценкой второго уровня, все аргументы должны быть представлены, когда он называется, и результат, наконец, оценивается. Пример:

    f(1, ?, ?) ---> unnamed_f(a, b)

затем

    unnamed_f(2, 3) ---> evaluate_and_return_value_for f(1, 2, 3)

Эта последовательность вызовов функций может быть сцеплена:

    f(1, ?, ?)(2, 3)

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

Как уже упоминалось, хотя у нас есть все аргументы в первом вызове, функция еще не оценена. Например, вызов функции:

    f(1, 2, 3)

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

    f(1, 2, 3) ---> unnamed_f()
Generators

In FP, unnamed_f() is a generator; a function that has no arguments but returns a result. Not to be confused with Phoenix generators to be discussed later.

Тогда:

    unnamed_f() ---> evaluate_and_return_value_for f(1, 2, 3)

Эта последовательность вызовов функции может быть конкатенирована как:

    f(1, 2, 3)()

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



Статья Lazy functions раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-06 00:37:13/0.0033349990844727/0