public Expr apply(Expr[] args, InterpContext ctx) throws RuntimeError {
		// 首先对参数进行求值
		Expr[] values = new Expr[args.length];
		for (int i = 0; i < args.length; i++) {
			values[i] = args[i].eval(ctx);
		}

		// 真正的函数应用
		switch (values.length) {
			case 0:
				return call();
			case 1:
				return call(values[0]);
			case 2:
				return call(values[0], values[1]);
			case 3:
				return call(values[0], values[1], values[2]);
			// case 4:
			// return call(values[0], values[1], values[2], values[3]);
			default:
				return call(values);
		}
	}