Кто-нибудь имеет представление о том, как написать основные выражения (нетипизированного) лямбда-исчисления в Java?т. е.
- идентификатор (λx.x),
- самостоятельное применение (λx.xx) и
- применение функции (λx.λarg.x arg)
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);
}
, и я даже не уверен, что они верны (!).Кто-нибудь может предложить лучшую альтернативу?
Редактировать: Обратите внимание, что я пытаюсь применить основные понятия лямбда-исчисления с как можно меньшим количеством синтаксического сахара или готовых функций.Например, я знаю, что есть identity (), BiFunction и т. Д. Я пытаюсь реализовать вышеизложенное, используя только базовые лямбда-конструкции, а это означает, что в основном используется только приложение функции