откуда x

Страницы: 1
RSS
откуда x
 
Иду по книжке иерусалимскиса "Программирование на Луа"
Поясните пожалуйста этот пример
Код
function derivative (f, delta)
   delta = delta or 1e-4
   return function (x) return (f(x + delta) - f(x))/delta end
end

c = derivative(math.sin)
print(math.cos(5.2), c(5.2))
Откуда function (x) return (f(x + delta) - f(x))/delta end берёт свой аргумент x?
http://dl4.joxi.net/drive/2018/12/28/0011/1313/742689/89/736976d5d2.pnghttp://dl4.joxi.net/drive/2018/12/28/0011/1313/742689/89/736976d5d2.png
 
 
Цитата
Let_it_go написал:
Откуда function (x) return (f(x + delta) - f(x))/delta end берёт свой аргумент x?

У Вас функция derivative возвращает функцию (в вашем примере "c" это функция) и X это параметр этой функции.
В Вашем примере X задается при вызове c(5.2)
 
Ещё один вопрос оттуда же
Код
function newCounter ()
   local i = 0
   return function () i = i + 1 return i end
end
c1 = newCounter()
print(c1()) --> 1
print(c1()) --> 2
Почему второй принт выводит 2, а не 1?
Ведь во второй строчке идёт обнуление переменной i. Она не может сохранить старое значение 1 и превращается в 0. Откуда 2?
 
Потому что функция c1, которая создана вызовом newCounter(), - не простая функция, а т.н. "замыкание". Она не просто может сохранить старое значение 1, она это делает, т.к. переменная i является для этой функции внешней, и именно для этого подобные конструкции и предусмотрены. См., например: https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BC%D1%8B%D0%BA%D0%B0%D0%BD%D0%B8%D0­%B5_(%D0%BF%D1%80%D...
 
Цитата
Let_it_go написал:
Почему второй принт выводит 2, а не 1?
Ведь во второй строчке идёт обнуление переменной i. Она не может сохранить старое значение 1 и превращается в 0. Откуда 2?
Получается, что 1 будут выводить только такие принты, в которых будет создаваться новый экземпляр newCounter вместе с новым нулевым i:
Код
print(newCounter()()) --> 1
print(newCounter()()) --> 1



Цитата
SDL написал:
Потому что функция c1, которая создана вызовом newCounter(), - не простая функция, а т.н. "замыкание". Она не просто может сохранить старое значение 1, она это делает, т.к. переменная i является для этой функции внешней, и именно для этого подобные конструкции и предусмотрены. См., например:   https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BC%D1%8B%D0%BA%D0%B0%D0%BD%D0%B8%D0­ ­%B5_(%D0%BF%D1%80%D...  
Прикольно) Спасибо!
Страницы: 1
Читают тему (гостей: 1)
Наверх