Введение в язык Питон


Функции высшего порядка: частичное вычисление функций - карринг (currying) - часть 2


Этот механизм подобен замыканию, о котором я рассказывал в предыдущей статье - каждый вызов каррированой функции добавляет больше данных, необходимых для  окончательного вычисления (данные прикрепляются к процедуре). Проиллюстрируем сначала карринг очень простым примером на Haskell, а затем повторим тот же пример на Python с помощью модуля functional:

    #------------- Currying a Haskell computation -----------#

          computation a b c d = (a + b^2+ c^3 + d^4)

          check = 1 + 2^2 + 3^3 + 5^4

          fillOne   = computation 1  -- specify "a"

          fillTwo   = fillOne 2      -- specify "b"

          fillThree = fillTwo 3      -- specify "c"

          answer    = fillThree 5    -- specify "d"

          -- Result: check == answer == 657

А теперь на Python:

    #------------- Currying a Python computation ------------#

          >>> from functional import curry

          >>> computation = lambda a,b,c,d: (a + b**2 + c**3 + d**4)

          >>> computation(1,2,3,5)

          657

          >>> fillZero  = curry(computation)

          >>> fillOne   = fillZero(1)   # specify "a"

          >>> fillTwo   = fillOne(2)    # specify "b"

          >>> fillThree = fillTwo(3)    # specify "c"

          >>> answer    = fillThree(5)  # specify "d"

          >>> answer



    Начало  Назад  Вперед



    Книжный магазин