Объясните мне, какое большое значение имеет оптимизация хвостовых вызовов и почему Python это нуждается

Таким образом, по-видимому, была большая броухаха по поводу того, нужен ли Python для оптимизации хвостового вызова. Это пришло в голову, когда кто-то отправил Guido копию SICP, потому что он «не получил». Я в той же лодке, что и Гвидо. Я понимаю концепцию оптимизации хвостовых вызовов. Я просто не могу придумать, почему Python действительно нуждается в этом.

Чтобы это стало понятным для меня, может ли кто-нибудь дать мне фрагмент кода, который будет значительно упрощен с использованием TCO?

5 Solutions collect form web for “Объясните мне, какое большое значение имеет оптимизация хвостовых вызовов и почему Python это нуждается”

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

На «практическом» языке (например, Python), OTOH, у вас обычно есть много других конструкций практически для любой ситуации, которую можно себе представить, поэтому она менее критична. Всегда хорошая вещь, чтобы иметь возможность непредвиденных ситуаций, конечно

Если вы сильно хотите использовать рекурсию для вещей, которые могут альтернативно быть выражены как циклы, тогда «оптимизация хвостовых вызовов» действительно обязательна. Тем не менее, Guido, Peneon's Benevolent Dictator For Life (BDFL), сильно верит в то, что петли выражаются в виде циклов – поэтому он не собирается обращаться к специальным хвостовым вызовам (жертвуя стеками следов стека и регулярностью отладки).

Оптимизация звонков позволяет легче записывать рекурсивные функции, не беспокоясь о переполнении стека:

def fac(n, result=1): if n > 1: return fac(n - 1, n * result) return result 

Без оптимизации хвостового вызова вызов этого с большим числом может переполнить стек.

Я долго думал о твоем вопросе (верь или нет …). Я был так глубоко инвестирован в этот вопрос, что, наконец, написал целую статью (которая также представляет собой один из моих модулей, которые я написал несколько месяцев назад, не тратя времени на то, чтобы написать точное объяснение, как это сделать). Если вы все еще интересуетесь этим вопросом, прочитайте мой ответ в своем блоге . В двух словах я даю презентацию модуля tco ; вы не найдете ничего, что вы уже не можете сделать без устранения хвостовой рекурсии, но вас могут заинтересовать мои мысли об этом.

Я знаю, что простые ссылки не являются предпочтительным использованием в Stackoverflow; пожалуйста, обратите внимание, однако, что я написал целую статью для ответа на этот пост (который я упоминаю в теле моей статьи), включая также некоторые иллюстрации для иллюстрации. По этой причине я отправляю здесь этот необычный ответ.

Гвидо признал в последующей записи, что ТШО позволяет более чистому исполнению государственной машины как совокупности функций, рекурсивно вызывающих друг друга. Однако на том же посту он предлагает альтернативное, как и более чистое решение, без ТШО.

 
Interesting Posts for Van-Lav

Вставить строку python gdata.spreadsheets.client

Почему исключения Python называются «Ошибка»?

Использование PythonAnywhere в качестве игрового сервера

Переместить элемент внутри списка?

Проблема с SCons – не понимаю класс Variables

Каковы хорошие библиотеки для создания программы python для (визуально привлекательных) 3D-моделирования / визуализации физики?

Сплит с одиночным двоеточием, но не двойной двоеточие с использованием регулярного выражения

Есть ли функция в Python, которая генерирует все строки длины n над заданным алфавитом?

pandas.to_datetime несовместимый формат строки времени

Основные вопросы о вложенной блокмодели в графическом инструменте

Список Python для хранения экземпляра класса?

Решение для AssertionError: неверное определение dtype в get_concat_dtype при объединении операции в списке Dataframes

разбить два на циклы

Индекс доступа в pandas.Series.apply

Как организовать тест python таким образом, чтобы я мог запускать все тесты в одной команде?

Python - лучший язык программирования в мире.