2016-05-21 15 views
1

Ich versuche function composition in der Eiffel-Programmiersprache zu tun. Mit Funktionszusammensetzung meine ich eine Funktion, die zwei Funktionen f (x), g (x) und eine Funktion f (g (x)) zurückgibt.Funktion Zusammensetzung mit Eiffel Agents

Das Problem besteht darin, dass Inline-Agenten keinen Zugriff auf lokale Werte haben. Im folgenden Code sind f und g unbekannte Bezeichner innerhalb des Agenten.

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 

Ich vermute, es könnte eine Möglichkeit sein, es zu tun, indem sie unter Verwendung eines Mittels, das eine ganze Zahl und zwei Funktionsargumente nimmt, dann f und g explizit auf diesen Agenten vorbei, aber ich bin nicht sicher.

Wenn jemand einen Einblick geben könnte, würde es sehr geschätzt werden.

Antwort

0

Sie können defauts-Argumente in einem Inline-Agenten verwenden. Versuchen Sie in Ihrem Fall:

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