L04-03. 柯里化函数

一. 柯里化函数

  1. 柯里化函数的用途: 目前还不清楚他的用途, 目前仅做了解

  2. 柯里化函数可以让add(1, 2) 的调用方式变成add(1)(2),或者add(1),add(2),并且,并且只有在最后调用()的时候才会返回计算结果,那么调用方式就变成了add(1), add(2), add(),或者add(1)(2)()

  3. --柯里化函数就是一个闭包函数,将所有参数保存在闭包中定义的表中, 只要条件符合则才会输出最后的结果

 

--简单的列子
local function currying(fun)
    local tab = {}
    local function f(a)
        if a == nil then
            if #tab == 0 then
                return nil
            end
            local res
            for i = 1, #tab do
                if tab[i + 1] then
                    res = fun(res or tab[i],tab[i + 1])
                else
                    res = #tab == 1 and tab[i] or res
                    tab = {}
                    return res
                end
            end
            tab = {}
            return res
        else
            table.insert(tab, a)
            return f
        end
    end
    return f
end

local function add(a, b)
   return a + b
end

local f = currying(add)

--第一次实验
f(1)
f(2)
f(3)
print("第一次实验", f())

--第二次实验
print("第二次实验",f(1)(2)())

--第三次实验
print("第三次实验",f())

--第四次实验
print("第四次实验",f(1)())

 

posted @ 2022-10-25 10:42  小书臣  阅读(24)  评论(0编辑  收藏  举报