1

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

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

4

1 回答 1

0

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

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
于 2016-05-21T18:21:02.980 回答