Пример #1
0
        public static Func <T1, T2, T3, T4, T5, T6, R> ToTailCall <T1, T2, T3, T4, T5, T6, R>(
            this Target <T1, T2, T3, T4, T5, T6, R> target)
        {
            R TailCall(T1 a, T2 b, T3 c, T4 d, T5 e, T6 f)
            {
                LazyRef <R> Target(Recurse <(T1, T2, T3, T4, T5, T6), R> func1, (T1, T2, T3, T4, T5, T6) tuple)
                {
                    LazyRef <R> Func(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
                    {
                        return(func1(ValueTuple.Create(arg1, arg2, arg3, arg4, arg5, arg6)));
                    }

                    return(target(Func, tuple.Item1, tuple.Item2, tuple.Item3, tuple.Item4, tuple.Item5, tuple.Item6));
                }

                return(ToTailCall <ValueTuple <T1, T2, T3, T4, T5, T6>, R>(Target)(ValueTuple.Create(a, b, c, d, e, f)));
            }

            return(TailCall);
        }
Пример #2
0
        public static Func <T1, T2, R> ToTailCall <T1, T2, R>(
            this Target <T1, T2, R> target)
        {
            R TailCall(T1 a, T2 b)
            {
                LazyRef <R> Target(Recurse <(T1, T2), R> func1, (T1, T2) tuple)
                {
                    LazyRef <R> Func(T1 arg1, T2 arg2)
                    {
                        return(func1(ValueTuple.Create(arg1, arg2)));
                    }

                    return(target(Func, tuple.Item1, tuple.Item2));
                }

                return(ToTailCall <ValueTuple <T1, T2>, R>(Target)(ValueTuple.Create(a, b)));
            }

            return(TailCall);
        }
Пример #3
0
        public static Func <T1, T2, T3, T4, R> ToTailCall <T1, T2, T3, T4, R>(
            this Target <T1, T2, T3, T4, R> target)
        {
            R TailCall(T1 a, T2 b, T3 c, T4 d)
            {
                LazyRef <R> Target(Recurse <(T1, T2, T3, T4), R> func1, (T1, T2, T3, T4) tuple)
                {
                    LazyRef <R> Func(T1 arg1, T2 arg2, T3 arg3, T4 arg4)
                    {
                        return(func1(ValueTuple.Create(arg1, arg2, arg3, arg4)));
                    }

                    return(target(Func,
                                  tuple.Item1, tuple.Item2, tuple.Item3, tuple.Item4));
                }

                return(ToTailCall <ValueTuple <T1, T2, T3, T4>, R>(Target)(ValueTuple.Create(a, b, c, d)));
            }

            return(TailCall);
        }