The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Схема Как понять Продолжения?, !*! 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)

  • Схема Как понять Продолжения?, !*! Аноним, 21:27 , 02-Янв-25 (1)
    Вбивай вопросы вроде этого в GPT.
    • Схема Как понять Продолжения?, !*! Аноним, 05:23 , 03-Янв-25 (5)
      > Вбивай вопросы вроде этого в GPT.

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

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

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

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

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

  • Схема Как понять Продолжения?, !*! Аноним, 05:20 , 03-Янв-25 (4) +1
    > (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 реализовывать. С другой стороны, мне на схеме писать нечего и всё тлен. Вот когда начну писать что-то стоящее, тогда и выучу.




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

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