Ускользает смысл, уже не раз пытался понять.Схема прекрасна, решил подтянуть матчасть. Если кто понимает простым языком поделитесь.
(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)
Вбивай вопросы вроде этого в GPT.
> Вбивай вопросы вроде этого в GPT.GPT не заменит отсутствующего комьюнити. И да, он отвратительно пишет схемокод. Понимать вроде понимает, но там, где можно в макросах обойтись символами, синтаксическими объектами или использовать какие-то другие схемофишки, он пишет так, как будто это питон.
Если call-with-current-continuation, рассматривай как сохранения в игре. Оно сохраняет весь "стейт игры" (на самом деле, весь фрейм и биндинги) на момент перед новым действием после формы call/cc и внутри лямбды в call/cc ты можешь либо сразу загрузить этот стейт, типа кнопки быстрой загрузки автосохраниния, либо этот стейт схоронить в переменную повыше уровнем (а это уже не быстрое сохранение, а как слоты сохранения в играх), продолжить работу, выйти за рамки call/cc и, например, в случае, если что-то пойдёт не так, загрузить свой стейт назад. На последнем случае легко можно backtracking реализовать.Примеры хотелось бы сделать, но в пять утра и на телефоне без емакса неохота рисовать. Может, потом.
Если delimited continuations, надо читать статьи Олега Киселёва и потихоньку на практике трогать.
Если хочешь понять CPS, сперва стоит поаутировать с лямбдами, это комбинаторы и introduction to functional programming mike gordon'а.
> Если call-with-current-continuation, рассматривай как сохранения в игре.Да, через про это, большое спасибо
> (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 реализовывать. С другой стороны, мне на схеме писать нечего и всё тлен. Вот когда начну писать что-то стоящее, тогда и выучу.
> Ускользает смысл, уже не раз пытался понять.
> Схема прекрасна, решил подтянуть матчасть. Если кто понимает простым языком поделитесь.
> (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