Lua是一种动态类型语言,变量名可以在运行时绑定到任意类型的值上。Lua从函数式编程语言中借鉴了许多思想,这体现在Lua的基本类型中除了有number,string等其它语言中常见的基本类型外,还有函数(function)。这意味着函数: <1> 可以用变量命名; <2>可以提供给函数作为参数; <3> 可以作为函数的返回值; <4> 可以包含在数据结构中。下面我们利用函数在Lua中作为"一等公民"的身份,来实现一个简单的泛函操作————函数复合。
假设有这样两个函数f: D1 × D2 × D3 × ... × Dn -> R(这表明函数f的定义域是集合D1到Dn的笛卡尔积的子集,值域是R的子集),g: R -> S,那么函数f与g就是可复合的,并且它们的复合函数h满足如下要求,它的定义域与f一样,值域与g一样,并且对于每个定义域中的元素e来讲,h(e)的值与g(f(e))的值相等。我们的目标是定义一个完成复合动作的函数,它的输入是任意两个满足可复合条件的函数,输出则是它们的复合函