LINUX.ORG.RU

История изменений

Исправление vertexua, (текущая версия) :

i = <data set>
while (!computation_complete(i)){
  i = perform_computation(i);
}
def cycle(i) = 
  if (!computation_complete(i))  cycle(perform_computation(i)) 
  else i
cycle(<data set>)

Не вижу фундаментальной разницы и даже темы разговора. Вот показал как формально любой цикл переводится в хвостовую рекурсию и обратно. 4 строчки в 4 строчки. Вместо <data_set> подставьте любой набор переменных.

В качестве бесплатного бонуса получаете возможность написать юнит-тест для одной итерации цикла.

Исходная версия vertexua, :

i = <data set>
while (!computation_complete(i)){
  i = perform_computation(i);
}
def cycle(i) = 
  if (!computation_complete(i))  cycle(perform_computation(i)) 
  else i
cycle(<data set>)

Не вижу фундаментальной разницы и даже темы разговора. Вот показал как формально любой цикл переводится в хвостовую рекурсию и обратно. Вместо <data_set> подставьте любой набор переменных.

В качестве бесплатного бонуса получаете возможность написать юнит-тест для одной итерации цикла.