【发布时间】:2017-12-01 20:04:48
【问题描述】:
我想知道,在 Java-8 中实现 alpha-equivalence 比较是否有任何好方法(如果可能的话)?
显然这两个 lambda-s 是 alpha 等效的。让我们假设在某些情况下我们想要检测这个事实。如何实现?
Predicate<Integer> l1 = x -> x == 1;
Predicate<Integer> l2 = y -> y == 1;
【问题讨论】:
-
@holi-java 这不是 OP 想要的......
-
如果情况像给定的例子一样简单,比较JVM指令就可以解决问题,因为你可以忽略变量名甚至泛型类型,只比较指令列表.像ASM 这样的框架可以帮助解释和比较字节码指令,但这可能需要做很多工作。
-
@Andremoniy serializeable 可能是一个选项,但我在考虑更大的 lambda 表达式中的顺序或指令,它们可能是等价的,但在 不同 顺序...生病必须尝试一下
-
您可以使用检测来读取 lambda 类,然后使用 asm 库之类的东西来确定它们是否等效,这对于您提供的简单示例来说可能就足够了,但它不会工作对于更复杂的情况。
-
@Marco13 也许:) 一旦有人提供这样的答案,我会考虑改变我的决定。
标签: java lambda java-8 lambda-calculus