LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

Второй пример некорректен, это не замыкание, нельзя повторить вот такое:

function print_sum(x)
   function make(acc)
      return function(x)
         print(("acc(%d) + %d"):format(acc, x))
         return make(acc+x)
      end
   end
   return make(x)
end

x = print_sum(10)(20)(30)(40)
x(100) <--
x(100) <--
acc(10) + 20
acc(30) + 30
acc(60) + 40
acc(100) + 100 <---
acc(100) + 100 <---

Ну и по стандарту конечно нельзя приводить указатель на данные к указателю на функцию.

Исходная версия MOPKOBKA, :

Второй пример некорректен, это не замыкание, нельзя повторить вот такое:

function print_sum(x)
   function make(acc)
      return function(x)
         print(("acc(%d) + %d"):format(acc, x))
         return make(acc+x)
      end
   end
   return make(x)
end

x = print_sum(10)(20)(30)(40)
x(100) <--
x(100) <--
acc(10) + 20
acc(30) + 30
acc(60) + 40
acc(100) + 100 <---
acc(100) + 100 <---