Описание тега tail-call

Tail call is a subroutine call that happens inside another procedure as its final action; it may produce a return value which is then immediately returned by the calling procedure.
2 ответа

Оптимизация хвостовой рекурсии и рекурсия в Java

У меня есть вопрос об оптимизации хвостовых вызовов, мне нужно знать, как ведет себя этот код Java: private void doSomething(int v) { inf f = someCalculation(v); if (f < 0) doSomething(v/2); else doSomething(v*2); } Этот код является бессмысленны…
5 ответов

Функциональные языки с параллельными сборщиками мусора?

Новый язык программирования Microsoft F# обеспечивает мощную комбинацию функционального программирования (первоклассные лексические замыкания и хвостовые вызовы) с эффективным параллельным сборщиком мусора, который позволяет легко использовать много…
10 ноя '08 в 13:02
1 ответ

Хвост рекурсивного возведения в степень в прологе

Я пытаюсь написать код, который получает 3 аргумента, когда X - коэффициент, Y - показатель степени, а R должен вернуть ответ. Мой код до сих пор - exp(X,0,R):- R is X*X. exp(X,Y,R):- Y1 is Y-1, exp(X,Y1,R). Я знаю, что это не работает. Но я не могу…
2 ответа

CIL (MSIL) рекурсия хвостового вызова в методах экземпляра

Фон: я программирую компилятор.NET (очень похожий на C#) для школьного проекта. Одна из возможностей, которую я сейчас пытаюсь добавить, - это рекурсия хвостового вызова в методах. Дополнительная информация: В CIL "this" передается в методы экземпля…
1 ответ

Как возможна оптимизация хвостовой рекурсии в C# при возврате трассировки стека при возникновении исключения

Я видел несколько вопросов, касающихся отсутствующей оптимизации хвостовых вызовов в C#, якобы делающей язык плохо подходящим для реализации рекурсивных алгоритмов. это, однако, заставляет задуматься о том, как мы можем выполнить оптимизацию хвостов…
21 окт '10 в 21:34
2 ответа

Arduino поддерживает устранение хвостовых вызовов?

Мне было интересно, если стандартная среда Arduino поддерживает устранение хвостовых вызовов... Кто-нибудь знает что-нибудь об этом?
2 ответа

Erlang, Last Call Optimization, лямбда-функции и как предотвратить рост стека

Я пишу некоторый код Erlang, и я столкнулся с странной ситуацией, которую я не понимаю. Код: -module(recursive_test). -export([a/2]). a(_, []) -> ok; a(Args, [H|T]) -> F = fun() -> a(Args, T) end, io:fwrite( "~nH: ~p~nStack Layers: ~p", [H,…
1 ответ

Вызов хвоста F# сломан из-за отсутствия скобок

При тестировании вызовов F# tail в статье блога команды F# я обнаружил, что почти один и тот же код имеет одинаковый результат, но разные IL, хотя в коде отличаются только круглые скобки. Следующий код оптимизирован компилятором, и я вижу br.s IL_00…
2 ответа

Поддерживают ли связанные функции правильные хвостовые вызовы в ES6?

В спецификации языка ECMAScript 2015, определения Function.prototype.apply а также Function.prototype.call оба включают "Perform PrepareForTailCall()" в качестве одного из своих шагов, поэтому мы знаем, что эти функции поддерживают надлежащие вызовы…
3 ответа

Как вставить в середину списка, будучи дружественным к хвосту, но без ущерба для производительности?

Так что у меня есть эта функция, которая, кажется, не является дружественной к хвосту, верно? let rec insertFooInProperPosition (foo: Foo) (bar: list<Foo>): list<Foo> = match bar with | [] -> [ foo ] | head::tail -> if (foo.Compare…
1 ответ

Хвостовая рекурсия [C]

Вопрос в моей книге: "Какие из рекурсивных вызовов (не функций!) Являются хвостовыми рекурсивными?" unsigned f(unsigned x) { if(x==0) return 1; else if(x==1) return f(x-1); else return 3*x + f(x-1); } В этом примере я предполагаю, что первый - хвост…
3 ответа

Visual C++ Оптимизация вызовов в хвосте

Согласно ответам на этот вопрос: какие компиляторы C++ выполняют оптимизацию хвостовой рекурсии, если таковые имеются? Похоже, что компилятор должен выполнить оптимизацию хвостовой рекурсии. Но я попробовал предложенные варианты, и кажется, что комп…
4 ответа

Как распознать, что есть, а что нет хвостовой рекурсии?

Иногда это достаточно просто (если self-вызов - последнее утверждение, это хвостовая рекурсия), но все же есть случаи, которые меня смущают. Профессор сказал мне, что "если после самостоятельного вызова нет инструкции для выполнения, это хвостовая р…
09 сен '10 в 16:32
1 ответ

luajit не может зацепить "возвращение хвоста"

Мы знаем, что Lua имеет библиотечную функцию debug.sethookкогда любая функция возвращается,функция ловушки вызывается с событием return или tail return, но LuaJIT не перехватывает tail return.Есть ли какие-нибудь методы, чтобы отключить специализаци…
02 июл '16 в 09:12
2 ответа

Хвостовой вызов в Java и C#?

Я читал о Clojure и обнаружил, что в текущей версии Java не поддерживает хвостовые вызовы, и что люди генерировали исключения для имитации хвостовых вызовов в JVM, в любом случае, похоже, что люди делают какие-то безумные штуки. Так что это заставил…
09 дек '08 в 15:03
1 ответ

Почему моя функция вызова хвоста не приостанавливает и сбрасывает вывод?

Я просмотрел справку по функции сна lua-users, пытаясь найти решение для не занятого ожидания, и я не доволен ни одним из них. Тем не менее я попытался использовать несколько, чтобы обеспечить задержку в конце функции, которая использует хвостовые в…
16 окт '15 в 03:17
2 ответа

Неизменяемая структура Три в F#

Я играю с алгоритмом aho-corasick, чтобы попытаться немного лучше с F#, и я столкнулся с проблемой с реализациями Trie, все они изменчивы или не могут быть оптимизированы с помощью хвостового вызова. Основная проблема, которую я вижу, заключается в …
22 мар '11 в 18:08
2 ответа

Как реализовать хвостовые вызовы в пользовательской виртуальной машине

Как я могу реализовать хвостовые вызовы в пользовательской виртуальной машине? Я знаю, что мне нужно извлечь локальный стек исходной функции, затем ее аргументы, а затем выдвинуть новые аргументы. Но если я вытолкну из локального стека функции, как …
13 май '10 в 14:10
2 ответа

Когда будет выполнено, будет ли это хвостовой вызов?

После компиляции и запуска это будет вести себя как хвостовой вызов? let rec f accu = function | [] -> accu | h::t -> (h + accu) |> f <| t Может быть, есть простой способ проверить поведение, о котором я не знаю, но это может быть другой…
14 май '13 в 18:01
1 ответ

Все ли функции Haskell выполняют хвостовые вызовы?

Мне было интересно, что каждая функция в Haskell должна быть хвостовой рекурсивной. Факториальная функция реализована как не хвостовая рекурсивная функция: fact 0 = 1 fact n = n * fact (n - 1) Каждый оператор тоже является функцией, так что это экви…
30 мар '15 в 08:04