【发布时间】:2021-12-11 22:55:39
【问题描述】:
我正在尝试将L-system 实现为函数。例如,dragon curve 看起来像这样:
static String F(int n) {
return n == 0 ? "F" : F(n - 1) + "+" + G(n -1);
}
static String G(int n) {
return n == 0 ? "G" : F(n - 1) + "-" + G(n -1);
}
@Test
void testDragonCurveAsStaticFunction() {
assertEquals("F", F(0));
assertEquals("F+G", F(1));
assertEquals("F+G+F-G", F(2));
assertEquals("F+G+F-G+F+G-F-G", F(3));
}
我想用 lambda 函数来实现它。参考recursion - Implement recursive lambda function using Java 8 - Stack Overflow得到了如下实现。
@Test
void testDragonCurveAsLambdaFunction() {
interface IntStr { String apply(int i); }
IntStr[] f = new IntStr[2];
f[0] = n -> n == 0 ? "F" : f[0].apply(n - 1) + "+" + f[1].apply(n - 1);
f[1] = n -> n == 0 ? "G" : f[0].apply(n - 1) + "-" + f[1].apply(n - 1);
assertEquals("F", f[0].apply(0));
assertEquals("F+G", f[0].apply(1));
assertEquals("F+G+F-G", f[0].apply(2));
assertEquals("F+G+F-G+F+G-F-G", f[0].apply(3));
}
有没有办法在不使用数组的情况下实现这一点?
但是我想创建一个通用的L-System,所以我不想为龙曲线定义一个新的类、接口或方法。
【问题讨论】: