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

Оптимизация хвостового вызова - это когда функция возвращает непосредственно результат вызываемой функции, чтобы избежать выделения нового кадра стека. Это особенно полезно в рекурсивных функциях.
1 ответ

Каково текущее состояние оптимизации хвостового вызова для F# на Mono (2.11)?

Каково текущее состояние реализации Tail Call Optimization (TCO) в Mono (2.11)? Где-то читал, что вся кодовая база должна быть изменена для использования соглашения callee-pops-arguments. Каков статус этого изменения? Актуален ли порт ARM/Linux по э…
07 мар '12 в 03:53
3 ответа

Хвостовая рекурсия в NodeJS

Так что недавно я столкнулся с вопросом о том, что мне нужно написать код, где сам обратный вызов вызывает и так далее, и задался вопросом о NodeJS и поддержке tail-call, поэтому я нашел этот ответ /questions/7907762/optimizatsiya-hvostovogo-vyizova…
3 ответа

Булевы операторы хвостового вызова оптимизированы?

Изучая Racket и изучая программирование в целом, я определял ormap двумя различными способами: (define (or-map proc lst) (cond [(null? lst) #false] [(proc (car lst)) #true] [else (or-map proc (cdr lst))])) (define (or-map proc lst) (if (null? lst) #…
2 ответа

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

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

Хвостовая рекурсия с Groovy

Я кодировал 3 факторных алгоритма: Во-первых, я ожидаю провала из-за переполнения стека. Нет проблем. Во-вторых, я пытаюсь вызвать рекурсивный вызов, преобразовать предыдущий алгоритм из рекурсивного в итерационный. Это не работает, но я не понимаю …
2 ответа

Гарантия оптимизации хвоста - циклическое кодирование в Haskell

Итак, короткая версия моего вопроса такова: как мы вообще должны кодировать циклы в Haskell? В Haskell нет гарантии оптимизации хвоста, паттерны взрыва даже не являются частью стандарта (верно?), И парадигма фолд / фолд не гарантируется в любой ситу…
05 фев '12 в 12:21
2 ответа

Устраняет ли Xcode для iPhone рекурсию хвостового вызова?

Поддерживает ли Xcode оптимизацию хвостового вызова на iPhone?
23 июн '09 в 23:37
2 ответа

Это хвостовой вызов? (Javascript)

Предположим, у вас есть рекурсивная функция, такая как: Blah.prototype.add = function(n) { this.total += n; this.children.forEach(function(child) { child.add(n); }); }; Это child.add() хвостовой вызов? Если нет, то можно ли так написать?
09 июн '15 в 21:16
5 ответов

У программ на функциональных языках более вероятно переполнение стека?

Я начинаю изучать ocaml, и я действительно ценю силу рекурсии в языке. Однако меня беспокоит одна вещь - переполнение стека. Если ocaml использует стек для вызовов функций, не будет ли он переполнен стеком? Например, если у меня есть следующая функц…
1 ответ

Исключение рекурсивного хвостового вызова для разложения квадри в Python

Используя Python, возможно ли исключить множественные рекурсивные хвостовые вызовы (преобразование в итерацию) в реализации квадродерева, которая присваивает точки (X, Y) поддоменам (так называемые листовые узлы)? Вот не такой уж псевдокод: def deco…
5 ответов

Объясните мне, в чем заключается проблема оптимизации хвостового вызова и зачем она нужна Python

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

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

Возможна ли какая-либо оптимизация хвостового вызова, кроме хвостовой рекурсии? Я пытался найти или подумать о том, что не связано с рекурсией, но безуспешно. Является ли это возможным? Есть примеры?
1 ответ

Как изменить этот код для включения оптимизации хвостового вызова в ES6?

Я написал функцию для рекурсивного суммирования значений, но она не соответствует критериям оптимизации хвостового вызова в ES6 (по причинам, которые я не могу сформулировать). function sum(...values) { if(!values.length) { return 0; } return values…
2 ответа

Почему scala не выполняет оптимизацию хвостовых вызовов?

Просто играю с продолжениями. Цель состоит в том, чтобы создать функцию, которая получит другую функцию в качестве параметра и количества выполнения - и функцию возврата, которая будет применять параметр заданное количество раз. Реализация выглядит …
14 май '13 в 09:24
1 ответ

Почему это вызов?

Вот простой привет мир: #include <stdio.h> int main() { printf("hello world\n"); return 0; } Вот это скомпилировано в LLVM IR: will@ox:~$ clang -S -O3 -emit-llvm ~/test_apps/hello1.c -o - ; ModuleID = '/home/will/test_apps/hello1.c' target dat…
03 сен '15 в 16:13
5 ответов

Функция добавления списка версий хвостовой рекурсии

Я вижу несколько примеров реализации append элемент списка, но все не используют хвостовую рекурсию. Как реализовать такую ​​функцию в функциональном стиле? (define (append-list lst elem) expr)
2 ответа

Насколько ограничен повтор?

Насколько я могу судить, Clojure's recur поддерживается компилятором, тогда как в других lisps он реализован на более низком уровне. Пока я читаю, это не будет "общая" стоимость владения. Помимо очевидного (нужно ключевое слово + проверка), это ника…
16 апр '12 в 05:21
2 ответа

System.OutOfMemoryException для хвостовой рекурсивной функции

Я выделил проблемный код для этой функции (которая использует класс Membership ASP.NET): let dbctx = DBSchema.GetDataContext() let rec h1 (is2_ : int) (ie2_ : int) : unit = match is2_ >= ie2_ with | true -> let st2 = query { for row in dbctx.T…
2 ответа

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

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

Есть ли техническая причина, по которой C# не выдает "хвост". Инструкция CIL?

Возможный дубликат: Почему.net/C# не устраняет хвостовую рекурсию? Возьмите следующий код C#: using System; namespace TailTest { class MainClass { public static void Main (string[] args) { Counter(0); } static void Counter(int i) { Console.WriteLine…