Functional programming 使用埃菲尔试剂的功能合成
我正在尝试用埃菲尔编程语言来做。通过函数合成,我的意思是创建一个函数,它接受两个函数f(x),g(x),并返回一个函数f(g(x)) 问题是内联代理无法访问本地值。在下面的代码中,f和g是代理中的未知标识符Functional programming 使用埃菲尔试剂的功能合成,functional-programming,function-composition,eiffel,Functional Programming,Function Composition,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) :
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传递给该代理,但我不确定
如果有人能提供一些见解,我们将不胜感激。您可以在内联代理中使用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
可以在内联代理中使用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