有没有办法在锡兰实现某种递归类型的功能?例如,我可以用类型安全的方式在Ceylon中定义组合逻辑,如下所示:
class Fi(shared Fi(Fi) o) { }
Fi veritas =
Fi((Fi t) =>
Fi((Fi f) =>
t));
Fi perfidas =
Fi((Fi t) =>
Fi((Fi f) =>
f));
Fi si =
Fi((Fi l) =>
Fi((Fi m) =>
Fi((Fi n) =>
l.o(m).o(n))));
print(si.o(veritas).o(veritas).o(perfidas) == veritas);
print(si.o(perfidas).o(veritas).o(perfidas) == perfidas);
print(si.o(veritas).o(perfidas).o(veritas) == perfidas);
print(si.o(perfidas).o(perfidas).o(veritas) == veritas);
此代码按预期工作。但是,为了清楚,简洁和适用于其他问题,我希望能够仅使用函数来实现此行为。采取以下(非工作)示例:
alias Fi => Fi(Fi);
Fi veritas(Fi t)(Fi f) => t;
Fi perfidas(Fi t)(Fi f) => f;
Fi si(Fi l)(Fi m)(Fi n) => l(m)(n);
print(si(veritas)(veritas)(perfidas) == veritas);
print(si(perfidas)(veritas)(perfidas) == perfidas);
print(si(veritas)(perfidas)(veritas) == perfidas);
print(si(perfidas)(perfidas)(veritas) == veritas);
在函数别名版本中,Fi类型表示可以无限期组合操作数和返回值的函数。请注意,由于它们的递归特性,Fi,Fi(Fi)和Fi(Fi)(Fi)类型可以被认为是功能相同的;他们中的任何一个消费者都知道,如果他们有一个功能,如果在Fi上调用,他们会给他们另一个Fi。
以下是我对锡兰目前支持的理解:
可以在当前版本的Ceylon中实现所需的行为吗?或者它肯定需要上述积压功能中的一个或两个?