URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10484
[ Назад ]

Исходное сообщение
"Схема Как понять Продолжения?"

Отправлено noname nobody , 02-Янв-25 16:26 
Ускользает смысл, уже не раз пытался понять.

Схема прекрасна, решил подтянуть матчасть. Если кто понимает простым языком поделитесь.

(define (range start end)
    (if (> start end)
        (list)
        (cons start (range (+ start 1) end))))

(range 1 10); => (1 2 3 4 5 6 7 8 9 10)


Содержание

Сообщения в этом обсуждении
"Схема Как понять Продолжения?"
Отправлено Аноним , 02-Янв-25 21:27 
Вбивай вопросы вроде этого в GPT.

"Схема Как понять Продолжения?"
Отправлено Аноним , 03-Янв-25 05:23 
> Вбивай вопросы вроде этого в GPT.

GPT не заменит отсутствующего комьюнити. И да, он отвратительно пишет схемокод. Понимать вроде понимает, но там, где можно в макросах обойтись символами, синтаксическими объектами или использовать какие-то другие схемофишки, он пишет так, как будто это питон.


"Схема Как понять Продолжения?"
Отправлено Аноним , 03-Янв-25 05:01 
Если call-with-current-continuation, рассматривай как сохранения в игре. Оно сохраняет весь "стейт игры" (на самом деле, весь фрейм и биндинги) на момент перед новым действием после формы call/cc и внутри лямбды в call/cc ты можешь либо сразу загрузить этот стейт, типа кнопки быстрой загрузки автосохраниния, либо этот стейт схоронить в переменную повыше уровнем (а это уже не быстрое сохранение, а как слоты сохранения в играх), продолжить работу, выйти за рамки call/cc и, например, в случае, если что-то пойдёт не так, загрузить свой стейт назад. На последнем случае легко можно backtracking реализовать.

Примеры хотелось бы сделать, но в пять утра и на телефоне без емакса неохота рисовать. Может, потом.

Если delimited continuations, надо читать статьи Олега Киселёва и потихоньку на практике трогать.

Если хочешь понять CPS, сперва стоит поаутировать с лямбдами, это комбинаторы и introduction to functional programming mike gordon'а.


"Схема Как понять Продолжения?"
Отправлено blevakagmail.com , 09-Янв-25 16:36 
> Если call-with-current-continuation, рассматривай как сохранения в игре.

Да, через про это, большое спасибо


"Схема Как понять Продолжения?"
Отправлено Аноним , 03-Янв-25 05:20 
> (define (range start end)
>     (if (> start end)
>         (list)
>         (cons start (range (+
> start 1) end))))

У тебя не работает хвостовая рекурсия. Если в твой ренж пойдет большой диапазон, он взорвёт память. Хотя, конечно, большие списки и так не стоит делать, но всё же рассмотри вот такое:
(define (range start end)
        (let loop ((cur end) (acc '()))
             (if (< cur start) acc
                 (loop (- cur 1) (cons cur acc)))))

Вообще, стоило бы мне выучить unfold из srfi-1, оно должно помогать с тем, чтобы аналоги iota реализовывать. С другой стороны, мне на схеме писать нечего и всё тлен. Вот когда начну писать что-то стоящее, тогда и выучу.


"Схема Как понять Продолжения?"
Отправлено blevakagmail.com , 07-Мрт-25 01:54 
> Ускользает смысл, уже не раз пытался понять.
> Схема прекрасна, решил подтянуть матчасть. Если кто понимает простым языком поделитесь.
> (define (range start end)
>     (if (> start end)
>         (list)
>         (cons start (range (+
> start 1) end))))
> (range 1 10); => (1 2 3 4 5 6 7 8
> 9 10)

Оказалось что я использую ironscheme в котором cc реализует только return