任何语言 "deeply" 都可以组合或简化功能吗?

Can any language "deeply" combine or simplify functions?

将两个或多个 functions/methods 结合起来作为一个整体工作是很常见的。例如:

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

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 字节码操作,但那样太复杂了。

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

函数式语言,例如 Haskell,提供了许多基于函数的组合特性,可以实现有针对性的优化。你可以看看function composition, lazy evaluation, partial application and higher order functions.

请注意,关于基于序列的计算的具体情况,已经做了大量工作。请参阅 Python 中的 generators 或称为 ranges 的更多 general/abstract 概念。例如,范围在 D 和 C++20 编程语言中可用。 范围的组合和优化是在相当低的水平上实现的,编译器通常不负责它们的具体优化。

最后,一些编译器能够执行相当巧妙的高级转换(请参阅 polyhedral model for loops, inter-procedural optimization 函数)。