使用Eiffel Agent的功能组合

时间:2016-05-21 17:17:12

标签: functional-programming function-composition eiffel

我想用Eiffel编程语言做function composition。通过函数组合,我的意思是创建一个函数,它接受两个函数f(x),g(x)并返回一个函数f(g(x))。

问题是内联代理无法访问本地值。在下面的代码中,f和g是代理中的未知标识符。

comp (f: FUNCTION [INTEGER, INTEGER]; g: FUNCTION [INTEGER, INTEGER]) : FUNCTION [INTEGER, INTEGER]
    do
        Result := agent (x: INTEGER) : INTEGER do Result := f(g(x)) end
    end

我怀疑可能有某种方法可以通过使用一个带有整数和两个函数参数的代理来实现,然后明确地将f和g传递给该代理,但我不确定。

如果有人能提供一些见解,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以在内联代理中使用defauts参数。在您的情况下,请尝试:

comp(f: FUNCTION [INTEGER, INTEGER]; g: FUNCTION [INTEGER, INTEGER]):FUNCTION [INTEGER, INTEGER]
    do
        Result := agent (a_f: FUNCTION [INTEGER, INTEGER]; a_g: FUNCTION [INTEGER, INTEGER]; x:INTEGER):INTEGER
                        do
                            Result := a_f(a_g(x))
                        end(f, g, ?)
    end