The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Схема Как понять Продолжения?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Языки программирования)
Изначальное сообщение [ Отслеживать ]

"Схема Как понять Продолжения?"  +/
Сообщение от noname nobodyemail (?), 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)

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


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

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

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

Ответить | Правка | Наверх | Cообщить модератору

2. "Схема Как понять Продолжения?"  +/
Сообщение от Pahanivo (ok), 02-Янв-25, 21:48 
Тебе зачем? Сиди дальше проходную охраняй ...


Ответить | Правка | Наверх | Cообщить модератору

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

4. "Схема Как понять Продолжения?"  +/
Сообщение от Аноним (5), 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 реализовывать. С другой стороны, мне на схеме писать нечего и всё тлен. Вот когда начну писать что-то стоящее, тогда и выучу.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру