use*_*039 8 java function lambda-calculus java-8
有没有人知道如何在java中编写(无类型)lambda演算的基本表达式?即
Java不是无类型的,所以我想任何解决方案都必须适应类型.但我只发现以下内容,请阅读解决方案:
static<T> Function<T,T> identity() {
return x->x;
}
static<T> Function<? extends Function<? super Function,T>,T> self() {
return x->x.apply(x);
}
static <B,C> Function<? extends Function<B,C>, Function<B,C>> apply() {
return x -> arg -> x.apply(arg);
}
Run Code Online (Sandbox Code Playgroud)
我甚至不确定它们是否正确(!).任何人都可以提出更好的选择吗?
编辑:注意,我试图尽可能少地使用语法糖或现成函数来应用lambda演算的基本概念.例如,我知道有identity(),BiFunction等.我试图实现上面只有基本的lambda结构可用,这意味着基本上只有函数应用程序
您的身份和应用解决方案是正确的.如果不将它们定义为功能然而,我发现x->x和Function::apply的可读性identity()和apply(),所以我就干脆直接使用它们.
至于自我应用,好吧,正如你注意Java的类型,并且在类型化的lambda演算中,自我应用是不可能的(至少在我知道的所有类型的lambda演算中).你可以通过使用原始类型(就像你做的那样)生成一些东西,但是你基本上扔掉了类型系统的一部分.
但是,为什么你需要这一切呢?
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |