Lua - 高阶导数函数

时间:2014-05-13 20:52:25

标签: function lua higher-order-functions

返回功能如何在Lua中运行?我试图绕过这个衍生函数,但我无法理解它。

function derivative(f, delta)
  delta = delta or 1e-4
  return function(x)
      return (f(x + delta) - f(x))/delta
    end
end

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:3)

首先see here

很快,函数就是一等公民,你可以将它们存储在变量中并从函数中返回。

二。在您的示例中,有一个要创建的闭包。它将具有up值f和delta,可用于内部函数。

因此,当您调用衍生函数时,将使用f和delta的副本创建新的闭包。你可以像其他任何函数一样调用它

local d = derivative(f, 1e-6)
d(10)

编辑:“回答但我无法理解在我的示例中匿名函数中如何处理x参数”

每个函数都有一个签名,多个正式属性,它会得到。 在Lua中,您可以使用任意数量的参数调用函数。我们来看一个例子。

local a = function(x1, x2) print(x1, x2) end
a(1) // 1, nil
a(1, 2) // 1, 2
a(1, 2, 3) // 1, 2

当您在变量a中调用函数时,每个给定的参数值将逐个与函数argumentList匹配。在第3个示例中,1将分配给x1,2到x2,3将被丢弃。在vararg函数的术语中,就像这样执行。

function a(...)
  local x1 = (...)[1]
  local x2 = (...)[2]
  // Body
end

在您的示例中,x被视为内部函数参数,在其中可见,并在您调用内部函数实例时初始化。

如上所述,

fdelta对每个函数实例都是唯一的。

希望我的笨拙解释会达到他们的目标,并帮助你一点点。