这个技术已经考虑一个半月了,我觉得在工业界应该有,只是没找到。
简单说是这样:一个函数接受给定的两个函数作为参数,把他们转换成一个新函数,而且是原子化/独立的。
举例:
Function<Integer, Integer> f = x -> x + 1;
Function<Integer, Integer> g = x -> x * 2;
Function<Integer, Integer> h = f.compose(g);
** **
h.toString //得到 x-> x*2+1 ,这是要实现的
这个实现不是Lisp为代表的函数组合,而更接近逻辑式编程的一些技术,比如让未知变量直接参与运算。函数组合已经在非函数式编程语言如Java形式上实现了。
我找的是比简单组合更深入(合并成x*2+1),但高于处理器层面(超标量、超线程、向量计算)。
只要这个实现了,反向拆分和重组难度就不大了,比如k = x,y -> x * 3 + y*2
这个函数,就可以通过加上 j' = y -> y*-2
作为逆运算变成k' = x ->x*3
和j = y -> y*2
。