Вопросы по теме 'tail-recursion'

Что такое оптимизация хвостового вызова?
Очень просто, что такое оптимизация обратного вызова? В частности, какие небольшие фрагменты кода можно применить, а где нет, с объяснением почему?
189566 просмотров

Как работает хвостовая рекурсия Haskell?
Я написал этот фрагмент кода и предполагаю, что len является хвостовой рекурсией, но переполнение стека все еще происходит. Что не так? myLength :: [a] -> Integer myLength xs = len xs 0 where len [] l = l len (x:xs) l = len xs...
9436 просмотров
schedule 23.06.2022

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

Пока или хвостовая рекурсия в F #, что и когда использовать?
Хорошо, только на F #, и вот как я это понимаю сейчас: Некоторые проблемы рекурсивны по своей природе (построение или считывание древовидной структуры, чтобы назвать только одну), и затем вы используете рекурсию. В этих случаях вы...
4198 просмотров

Хвостовая рекурсивная сортировка слиянием в OCaml
Я пытаюсь реализовать хвостовую рекурсивную функцию сортировки списков в OCaml и получил следующий код: let tailrec_merge_sort l = let split l = let rec _split source left right = match source with | [] -> (left, right)...
5303 просмотров
schedule 08.04.2022

Предупреждение / ошибка Clojure при сбое оптимизации хвостового вызова
В Scala 2.8.x была добавлена ​​новая аннотация ( @tailrec ), которая выдает ошибку времени компиляции, если компилятор не может выполнить оптимизацию хвостового вызова для аннотированного метода. Есть ли в Clojure аналогичные возможности по...
707 просмотров
schedule 26.04.2023

Как мне выйти из цикла в Scala?
Как разорвать петлю? var largest=0 for(i<-999 to 1 by -1) { for (j<-i to 1 by -1) { val product=i*j if (largest>product) // I want to break out here else...
213809 просмотров
schedule 04.12.2021

Схема накопительной рекурсии со списками
Как я могу передать список в качестве параметра функции, рекурсивно добавляющей к нему элементы, и оставить его без изменений, когда он выйдет из рекурсии? Я хочу использовать список на каждом уровне рекурсии со списком, имеющим значения,...
1442 просмотров
schedule 11.06.2023

Вопрос по статье оптимизации хвостового вызова
У меня есть вопрос относительно этой статьи. Между этим кодом function odds(n, p) { if(n == 0) { return 1 } else { return (n / p) * odds(n - 1, p - 1) } } и этот код (function(){ var odds1 = function(n, p, acc) {...
256 просмотров

Разве в OCaml нет проверки рекурсии?
Недавно я играл с OCaml и сразу же сделал свою любимую вещь, чтобы проверить, насколько хорошо разработана виртуальная машина/компилятор, и написал рекурсивную программу: let rec f i = Printf.eprintf "i = %d\n" i; f(i+1);; let () = f...
1152 просмотров

Реализация хвостовой рекурсивной версии функции быстрой сортировки в F#/OCaml
Можно ли реализовать хвостовую рекурсивную версию алгоритма быстрой сортировки (через шаблон продолжения)? И если да, то как это реализовать? Обычная (не оптимизированная) версия: let rec quicksort list = match list with | [] -> [] |...
3006 просмотров

Преобразование рекурсивной функции в хвостовую рекурсию в python
В качестве упражнения я реализовал функцию карты, используя рекурсию в python, следующим образом: #map function that applies the function f on every element of list l and returns the new list def map(l,f): if l == []: return []...
2596 просмотров
schedule 06.04.2022

Рекурсия по списку s-выражений в Clojure
Чтобы задать некоторый контекст, я изучаю Clojure и разработку Lisp в целом. На моем пути к Lisp я в настоящее время работаю над серией "Little", пытаясь укрепить фундамент в функциональном программировании и решении рекурсивных решений. В...
1783 просмотров

Как перевести следующее в хвостовую рекурсивную процедуру?
У меня есть следующее математическое выражение: ; f(n) = f(n - 1) + f(n - 2) where n >= 2 ; f(n) = n where n < 2` Который я перевел в обычный рекурсивный вызов LISP: (define (f n) (cond ((< n 2) n) (else (+ (f (- n...
929 просмотров
schedule 26.06.2022

Почему Scala не оптимизирует хвостовой вызов с помощью try / catch?
В недавнем ответе StackOverflow я дал следующий рекурсивный код: def retry[T](n: Int)(fn: => T): T = { try { fn } catch { case e if n > 1 => retry(n - 1)(fn) } } Если я добавлю аннотацию @tailrec , я получу:...
1516 просмотров
schedule 10.07.2023

Хвостовая рекурсия в FParsec
Я столкнулся с проблемой парсеров с двумя ветвями рекурсии. Чтобы упростить демонстрацию проблемы, я использую простую грамматику лямбда-исчисления из статья, написанная Лукой Болоньезе в качестве примера: <expression> ::= <name>...
384 просмотров
schedule 28.07.2023

хвостовая рекурсивная/эффективная функция для подсчета элементов списка (без использования List.count/Seq.count)
Я попытался выполнить хвостовую рекурсивную функцию, которая будет подсчитывать элементы списка, следовал правилам, использовал накопитель, но когда я запускаю ее так: lstcountr [1..98765432];; Я получаю это:...
923 просмотров
schedule 26.04.2023

Является ли эта функция F # хвостовой рекурсивной, когда рекурсивная функция вызывается несколько раз внутри функции?
Есть несколько вопросов о хвостовой рекурсивной функции, например: this и this , но не смог найти ничего похожего на следующее. Насколько я понимаю, функция, оптимизированная для хвостового вызова, должна возвращать накопленное значение в своем...
824 просмотров

Как пройти AST с хвостовой рекурсией в Clojure
У меня есть AST ANTLR3, который мне нужно пройти, используя обход в глубину, который я реализовал примерно как следующий Clojure: (defn walk-tree [^CommonTree node] (if (zero? (.getChildCount node)) (read-string (.getText node))...
1566 просмотров

Как преобразовать эту функцию для использования хвостового вызова
Рекурсивная функция: let rec listMerge (l1 : 'a list) (l2 : 'a list) = if l1.IsEmpty then l2 elif l2.IsEmpty then l1 else l1.Head :: l2.Head :: listMerge l1.Tail l2.Tail Теперь, если я не ошибаюсь, это...
509 просмотров