0

将两个或多个功能/方法组合在一起并作为一个整体工作是很常见的。举些例子:

以功能方式“组合”javascript中的功能?

在 C++11 中是否可以将函数组合成一个新函数?

但是,我想知道是否可以这样做:

Function<Integer, Integer> f = x -> x + 1;
Function<Integer, Integer> g = x -> x * 2;
Function<Integer, Integer> h = f.compose(g);
** **
h.toString  //get x-> x*2+1 , what I want

函数被“深度”组合,类似于Matlab等数学软件中的表达式简化。

我知道编译器中有一些有用的技术,我正在寻找如何在高级语言中完成它。

顺便说一句,我想理论上可以使用 JVM 字节码操作,但这太复杂了。

4

1 回答 1

0

请注意,语言通常不指定要应用的(可能的)优化。优化委托给编译器运行时系统

函数式语言,例如 Haskell,提供了许多基于函数的组合特性,可以实现目标优化。您可以查看函数组合惰性求值部分应用高阶函数

请注意,对于基于序列的计算的特定情况,已经做了很多工作。请参阅Python 中的生成器或更通用/抽象的概念,称为范围。例如,范围在 D 和 C++20 编程语言中可用。范围的组合和优化是在相当低的级别上实现的,编译器通常不对其特定的优化负责。

最后,一些编译器能够执行相当聪明的高级转换(请参阅循环的多面体模型,函数的过程间优化)。

于 2020-07-01T12:22:56.263 回答