package net.ciklum.icfpc11.domain.greenspoon10 /** * blabla * @author vic */ @Typed class CurriedFunction extends Function { final int argCount final List args final MultiArgFunction func CurriedFunction(MultiArgFunction func, int argCount, List args) { this.argCount = argCount this.args = args this.func = func } @Override Function apply(Function arg) { super.apply(arg) List newArgs = args + [arg] if (args.size() == argCount-1) { return func.evaluate(newArgs) } return new CurriedFunction(func, argCount, newArgs) } String toString() { "$func${args ? '(' + args.join(',') + ')' : ''}" } }