Описание тега continuation-passing
В функциональном программировании стиль передачи продолжения (CPS) - это стиль программирования, в котором управление передается явно в форме функции (функций) продолжения.
2
ответа
Инструменты производительности для эрланга
При написании функции, подобной факториалу: fac(Val) when is_integer(Val)-> Visit = fun (X, _F) when X < 2 -> 1; (X, F) -> X * F(X -1, F) end, Visit(Val, Visit). нельзя не заметить, что оптимизация хвостового вызова не прямолинейна, одна…
26 май '13 в 21:26
2
ответа
Есть ли способ зафиксировать продолжения в нотации do?
Поскольку следующий блок do: do x <- foo y <- bar return x + y desugared к следующей форме: foo >>= (\x -> bar >>= (\y -> return x + y)) не \x -> ... а также y -> ... собственно продолжения здесь? Мне было интересно, ес…
05 июл '12 в 20:49
3
ответа
В чем разница между продолжением и обратным вызовом?
Я просматривал всю сеть в поисках просвещения о продолжениях, и это ошеломляет, как простейшие объяснения могут так сильно запутать программиста JavaScript, как я. Это особенно верно, когда большинство статей объясняют продолжения с помощью кода в S…
24 дек '12 в 09:12
1
ответ
Использование кучи для CPS против не-CPS парсеров в парсеке Haskell
Я пытаюсь написать следующий парсер с использованием parsec: manyLength :: forall s u m a. Monad m => ParsecT s u m a -> ParsecT s u m Int manyLength p = go 0 where go :: Int -> ParsecT s u m Int go !i = (p *> go (i + 1)) <|> pure …
29 мар '17 в 11:40
1
ответ
Мой CPS прав?
В "Языке программирования схем 4-е издание" приведен пример, приведенный ниже: (define product (lambda (ls) (call/cc (lambda (break) (let f ([ls ls]) (cond [(null? ls) 1] [(= (car ls) 0) (break 0)] [else (* (car ls) (f (cdr ls)))])))))) (product '(1…
04 июл '12 в 07:39
1
ответ
Переписать код с продолжениями
У меня есть код, который оценивает примитивные программы. Программа представляет собой список операторов (выражение, блок, оператор возврата). Результатом оценки является последнее оцененное выражение. Также оценщик должен правильно относиться retur…
11 май '14 в 14:57
2
ответа
Почему обход большого двоичного дерева приводит к переполнению стека даже при использовании стиля прохождения продолжения?
Глава 9 книги Эксперт F# 3.0 показывает, как использовать стиль прохождения продолжения, чтобы избежать переполнения стека при обходе двоичных деревьев. Я написал код обхода дерева, который почти идентичен коду из книги, но, тем не менее, я получаю …
08 ноя '16 в 00:38
1
ответ
Как написать функции анализатора / оценки, такие как `eval-if`, в форме CPS?
Я пытаюсь написать игрушечный интерпретатор Python Scheme, основанный на мета-циклическом оценщике в SICP. Поскольку python поддерживает только стек вызовов ограниченной глубины, я должен исключить хвостовые вызовы. Я читал о батутах и реализовал …
15 фев '12 в 05:37
4
ответа
Продолжение прохождения стиль против монад
Каковы различия между продолжением прохождения стиля (cps) и монады.
24 дек '10 в 10:58
3
ответа
Слушатели событий с продолжением Scala
Предположим, мне нужно написать код GUI следующим образом: widget1.addListener(event1 => handle1(event1) widget2.addListener(event2 => handle2(event2) widget3.addListener(event3 => handle3(event3)) ) ) Как бы вы написали это в стиле CPS, используя п…
19 май '11 в 16:46
0
ответов
Передача данных строки jqGrid в контроллер по одному
У меня есть что-то вроде этого Как я могу передать данные JQGrid в контроллер в последовательности. Я хочу связать данные с другой сеткой в контроллере, только первая строка из "Списка требований" передается контроллеру, и это связывает данные в "…
13 июн '18 в 05:08
2
ответа
[a,b].reduce(f,x) код для [a,b].reduce(f) с использованием функциональных ссылок на основе преобразователя /CPS?
В моем предыдущем вопросе: Извлечение данных из цепочки функций без массивов @Aadit M Shah дал мне удивительное решение следующим образом: /questions/7959932/izvlechenie-dannyih-iz-tsepochki-funktsij-bez-massivov/7959947#7959947 Учитывая выражение к…
19 июл '18 в 16:33
2
ответа
Как реализовать безопасный для стека оператор chainRec для продолжения монады?
Я сейчас экспериментирую с монадой продолжения. Cont на самом деле полезен в Javascript, потому что он абстрагируется от шаблона обратного вызова. Когда мы имеем дело с монадической рекурсией, всегда существует риск переполнения стека, потому что ре…
24 фев '18 в 20:57
2
ответа
Что такое административные переопределения после преобразования CPS?
В контексте преобразования Scheme и CPS у меня возникли небольшие проблемы с определением, какие именно административные переопределения (лямбды): все лямбда-выражения, представленные преобразованием CPS только лямбда-выражения, представленные преоб…
23 янв '10 в 09:21
2
ответа
Почему в OCaml std lib так много нерекурсивных функций?
Я переписывал многие стандартные библиотечные функции OCaml, чтобы в последнее время использовать хвостовую рекурсию. Учитывая, что это повлекло за собой прямое преобразование CPS, я не могу понять, почему версии по умолчанию не написаны таким образ…
17 авг '12 в 20:12
1
ответ
Преобразование ANF в стиле продолжения прохождения
Алгоритм преобразования кода из S-выражений в A-нормальную форму приведен по http://matt.might.net/articles/a-normalization/ Автор сделал необычный выбор написания алгоритма в стиле продолжения прохождения. (То есть дело не в том, что промежуточный …
20 июл '17 в 15:44
2
ответа
Обработка исключений вокруг смены в Scala
Scala 2.10.2. Бег import util.continuations._ import concurrent.ops._ object Main { def main(args: Array[String]) { reset { try { shift { cont: (Unit => Unit) => { spawn { throw new Exception("blah") cont() } }} println("after shift") } catch …
15 июл '13 в 14:25
2
ответа
Почему продолжение прохождения стиля
В разделе 3.4 " Язык программирования схем " Кента Дибвига (4-е издание) он очень четко описывает стиль продолжения передачи. По той причине, почему он приводит две причины: передать более одного результата его продолжению, потому что процедура, реа…
17 дек '11 в 10:33
1
ответ
Продолжение прохождения стиля - функция композиции
Я изучаю CPS с помощью Racket, и мне удалось написать эти функции: ;lift a regular single-arg function into CPS (define (lift/k f) (lambda (x k) (k (f x)))) ;compose two CPS functions (define (compose/k f g) (lambda (x k) (g x (lambda (y) (f y k))))…
07 мар '11 в 04:32
2
ответа
Как лучше всего объявить val как последовательность ранее объявленных val в блоке в Scala?
Довольно типичный вариант использования: объект (или класс) объявляет несколько открытых значений связанных типов, и он хотел бы объявить метод доступа, возвращающий коллекцию, содержащую все из них: case class Ball(dia :Int) object Balls { val tenn…
13 сен '16 в 01:08