Описание тега tailrecursion-modulo-cons

Tail recursion modulo cons is similar to ordinary tail recursion, except that the recursive call is wrapped in a tail call to a constructor, which can be allocated and partially filled in _before_ the recursive call which thus becomes tail.
2 ответа

Объяснение алгоритма Пролог для добавления двух списков вместе

Это алгоритм для добавления двух списков: Domains list= integer* Predicates nondeterm append(list, list, list) Clauses append([], List, List) :- !. append([H|L1], List2, [H|L3]) :- append(L1, List2, L3). Goal append([9,2,3,4], [-10,-5,6,7,8], Ot). Р…
2 ответа

F# PurelyFunctionalDataStructures WeightBiasedLeftistHeap ex 3.4

Я работаю над чисто функциональными структурами данных Окасаки и пытаюсь построить реализацию F# вещей. Я также выполняю упражнения, перечисленные в книге (некоторые довольно сложные). Ну, я застрял в упражнении 3.4, которое вызывает изменение функц…
5 ответов

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

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

Будет ли этот код на Haskell занимать слишком много памяти?

Как в этом коде: import Data.Char groupsOf _ [] = [] groupsOf n xs = take n xs : groupsOf n ( tail xs ) problem_8 x = maximum . map product . groupsOf 5 $ x main = do t <- readFile "p8.log" let digits = map digitToInt $concat $ lines t print $ pr…
25 ноя '11 в 23:46
4 ответа

Как можно объединить две строки, которые расположены в алфавитном порядке в LISP с помощью рекурсии

Я учу Лисп. Я реализовал общую функцию lisp, которая объединяет две строки, которые упорядочены в алфавитном порядке с использованием рекурсии. Вот мой код, но что-то не так, и я не понял этого. (defun merge (F L) (if (null F) (if (null L) F ; retur…
24 апр '12 в 19:30
2 ответа

Схема хвостовой рекурсии

Я пытаюсь создать схему хвостовой рекурсивной функции flatten-tl-rec, которая сглаживает вложенный список списков. (define flatten-tl-rec (lambda (xs) (letrec ([flatten-tl-rec-acc (lambda (xs acc) (cond ((empty? xs) acc) ((list? (first xs)) (flatten…
2 ответа

Хвост-рекурсивный ограниченный поток пар целых чисел (Scala)?

Я очень новичок в Scala, так что прости мое невежество! Я пытаюсь перебрать пары целых чисел, которые ограничены максимумом. Например, если максимум равен 5, то итерация должна вернуть: (0, 0), (0, 1), ..., (0, 5), (1, 0), ..., (5, 5) Я решил попроб…
5 ответов

Сложности во время выполнения для рекурсивных алгоритмов

Я искал высоко и низко и не могу найти много материала, связанного со сложностями во время выполнения, рекурсией и Java. В настоящее время я изучаю сложности времени выполнения и нотацию Big-O в моем классе Algorithms, и у меня возникают проблемы с …
4 ответа

Стоит ли избегать хвостовой рекурсии в Прологе и вообще?

Я работаю над онлайн-книгой "Learn Prolog now" для удовольствия. Я пытаюсь написать предикат, который проходит через каждого члена списка и добавляет один к нему, используя аккумуляторы. Я уже сделал это легко без хвостовой рекурсии. addone([],[]). …
1 ответ

Почему можно оптимизировать Tail Recursion Modulo Cons?

Например, это не хвостовой вызов: map _ [] = [] map f (x : xs) = f x : map f xs рекурсивный вызов охраняется (:)конструктор данных, поэтому он не будет создавать огромный стек, как это может сделать эквивалент на каком-то другом языке. Это работает …
0 ответов

Хвостовая рекурсия с монадами State и CPS?

Я занимаюсь созданием простой библиотеки синтаксического анализа в Haskell, которая компилирует спецификацию синтаксического анализатора в оптимизированный код с использованием Template Haskell. Однако я пытаюсь выяснить, какой код наиболее эффектив…