Рубрики
Без рубрики

Рекурсия, корекурсия и благодарность

Java не поддерживает хвостовые вызовы. Обычный обходной путь – это тип, подобный следующему. классный удар&lt… Помеченный java.

Java не поддерживает хвостовые вызовы.

Обычный обходной путь – это тип, подобный следующему.

С математической точки зрения этот тип на самом деле является корекурсивным определением, похожим на тип данных потока.

exists b. (b -> (b + a))

Случается, что существует двойной рекурсивный тип данных.

forall b. ((a -> b) -> (b -> b) -> b

Вы можете применить математику к простой факториальной функции следующим образом.

  C fact (int m, int n, Function,C> y, Function result) {
     if (n < 1){
          return h.apply(m);
     }
     return y.apply(() -> fact(m *n, n -1, y, h));
}

На первый взгляд кажется, что мы ничего не получили от этого подхода, кроме некоторой косвенности. Но на самом деле это позволяет нам отложить и продумать шаг оценки или просто оценить его напрямую.

Я все еще не уверен, что это лучший подход для хвостовых вызовов в JVM, но я по-прежнему надеюсь, что схемы рекурсии дадут лучший ответ, чем обычный.

Оригинал: “https://dev.to/mspondee/recursion-corecursion-and-thunks-2ok9”