能否求高阶函数的逆?从twice函数结果提取原函数f的方法
能否从twice的求值结果还原原函数f?
结论是:不可能写出这样的find_f函数,原因如下:
首先明确twice的定义:
const twice = f => x => f(f(x))
当调用twice(f)后,得到的是新函数g = x => f(f(x))——这个过程对原函数f的信息做了“压缩”,直接丢失了唯一还原f的可能性。
核心问题:不同的f可能生成完全相同的g
举个直观的例子:
- 假设
f1(x) = -x,那么twice(f1)(x) = -(-x) = x,也就是恒等函数; - 再假设
f2(x) = x,那么twice(f2)(x) = f2(f2(x)) = x,同样是恒等函数。
此时twice(f1)和twice(f2)得到的是同一个函数g,但对应的原函数f1和f2完全不同。如果find_f存在,它面对这个g时根本无法确定返回f1还是f2——因为g的行为里没有任何信息能区分这两个原函数。
理论本质:twice不是单射函数
从函数映射的角度看,twice是把函数f映射到g的函数,但这个映射不是单射(即不是每个g都只对应唯一的f)。只有单射函数才有逆函数,因此不存在能完美还原f的find_f。
简单来说,twice(f)的结果只保留了f执行两次后的行为,完全丢失了f单次执行的细节,自然无法逆向推导出原函数f。
内容的提问来源于stack exchange,提问作者Andrew Soon
相关产品推荐
相关产品推荐

