如何在 Lua 中编写 sum(f,n) 的高阶函数?

四字形

首先,我当然知道严格来说 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)

LMD

首先,我当然知道严格来说 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章