【问题标题】:Can any language "deeply" combine or simplify functions?任何语言都可以“深度”组合或简化功能吗?
【发布时间】:2020-10-21 20:01:18
【问题描述】:

通常将两个或多个函数/方法组合在一起并作为一个整体工作。例如:

To "combine" functions in javascript in a functional way?

Is it possible in C++11 to combine functions into a new function?

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

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

【问题讨论】:

    标签: optimization programming-languages program-transformation


    【解决方案1】:

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

    Haskell 等函数式语言提供了许多基于函数的组合特性,可以实现目标优化。你可以看看function compositionlazy evaluationpartial applicationhigher order functions

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 2018-04-13
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      相关资源
      最近更新 更多