エレファント・コンピューティング調査報告

極限に関する順序を論理プログラミングの手法を使って指定することを目指すブロクです。

関数プログラミングと無限論理多項式(40)

C# の例(16) (タプル(2))

UnfoldL もタプルを使って書き直します。

        private static (Func<bool> next, Func<U> getCurrent, Action<U> setCurrent) UnfoldL<T, U>(Func<T, (U, T)> next, T init)
        {
            T src = init;
            U dst = default(U);
            bool next_()
            {
                (dst, src) = next(src);
                return src != null;
            }
            U getCurrent()
            {
                return dst;
            }
            void setCurrent(U val)
            {
            }
            return (next_, getCurrent, setCurrent);
        }

それを呼び出している IterateServer も書き換えます。

        public static string IterateServer()
        {
            LongDecimal number = new LongDecimal();
            LongDecimal square_difference = new LongDecimal(3);
            (LongDecimal, LongDecimal, int) init_numbers = (number, square_difference, 0);
            return new LongDecimal(Take(count, UnfoldL(GetNextDecimalDigitAndNumbers, init_numbers))).Print();
        }