首先,我当然知道严格来说 Lua 不支持高阶函数,只支持一等函数。
但是,我想尝试实现某种函数,对于给定函数和数字 n >= 0,返回总和 0 + f 1 + ... + f n。我的尝试方式是这样的:
function sum(f,n)
if n < 1
then
return 0
else
return sum(f, n-1) + f(n)
end
end
我不确定当我尝试调用它时它是否真的做了它应该做的事情:
print(sum(function(x) return x*x end, 2),3)
首先,我当然知道严格来说 Lua 不支持高阶函数,只支持一等函数。
这是错误的。Lua 的“一等”函数允许使用高阶函数:您可以简单地将函数作为参数传递。
我不确定当我尝试调用它时它是否真的做了它应该做的事情:
print(sum(function(x) return x*x end, 2),3)
在 Lua REPL 中调用它,我得到了 5 = 1^2 + 2^2 的期望结果:
$ lua
Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio
> function sum(f,n)
>> if n < 1
>> then
>> return 0
>> else
>> return sum(f, n-1) + f(n)
>> end
>> end
>
> print(sum(function(x) return x*x end, 2),3)
5 3
不过,我看不到, 3
( 最终成为print
) 的额外参数的目的。
更有效的实现将使用for
-loop 而不是递归:
function sum(f, n)
local sum = 0
for i = 1, n do
sum = sum + f(i)
end
return sum
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句