使用埃菲尔代理的函数组合

Function Composition Using Eiffel Agents

我正在尝试用 Eiffel 编程语言function composition。通过函数组合,我的意思是创建一个函数,它接受两个函数 f(x)、g(x) 和 returns 一个函数 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 显式传递给该代理,但我不确定。

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

您可以在在线代理中使用默认参数。在你的情况下,尝试:

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