guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: call/cc does not return a value


From: Mikael Djurfeldt
Subject: Re: call/cc does not return a value
Date: Fri, 13 Sep 2024 10:25:05 +0200

Hi Damien,

Maybe I'm missing something, but shoudn't it be:

(define-syntax for
  (lambda (stx)
    (syntax-case stx ()
      ((kwd (init test incrmt) body ...)
       (with-syntax ((BREAK (datum->syntax (syntax kwd) 'break))
                     (CONTINUE (datum->syntax (syntax kwd) 'continue)))
     (syntax
      (call/cc
       (lambda (escape)
         (let ((BREAK escape))
           init
           (let loop ()
         (when test
           (call/cc
            (lambda (next)
              (let ((CONTINUE next))
            (let () ;; allow definitions
              body ...)))) ; end call/cc
           incrmt
           (loop))) ; end let loop
           ))))) ;; close with-syntax
       ))))

?

On Fri, Sep 13, 2024 at 8:53 AM Damien Mattei <damien.mattei@gmail.com> wrote:
>
> hello,
>
> i believed call/cc allowed to return value but i have this macro and i can
> use continuation, but the value is not passed to the continuation:
>
> (define-syntax for
>    (lambda (stx)
>      (syntax-case stx ()
>        ((kwd (init test incrmt) body ...)
>
>         (with-syntax ((BREAK (datum->syntax (syntax kwd) 'break))
>                       (CONTINUE (datum->syntax (syntax kwd) 'continue)))
>
>     (syntax
>      (call/cc
>       (lambda (escape)
> (let-syntax ((BREAK (identifier-syntax (escape))))
>   init
>   (let loop ()
>     (when test
>       (call/cc
> (lambda (next)
>  (let-syntax ((CONTINUE (identifier-syntax (next))))
>    (let () ;; allow definitions
>      body ...)))) ; end call/cc
>       incrmt
>       (loop))) ; end let loop
>   ))))) ;; close with-syntax
> ))))
>
>
> mattei@acer:~$ guile
> GNU Guile 3.0.9
> Copyright (C) 1995-2023 Free Software Foundation, Inc.
>
> Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
> This program is free software, and you are welcome to redistribute it
> under certain conditions; type `,show c' for details.
>
> Enter `,help' for help.
> scheme@(guile-user)> (use-modules (Scheme+))
> WARNING: (Scheme+): imported module (if-then-else) overrides core binding
> `if'
> WARNING: (Scheme+): imported module (when-unless) overrides core binding
> `when'
> WARNING: (Scheme+): imported module (when-unless) overrides core binding
> `unless'
>
> scheme@(guile-user)> (for ((define i 0) (< i 5) (set! i (+ i 1))) (define x
> 7) (display i)  (newline) (when (= i 2) (break "finish")))
> 0
> 1
> 2
>
> here i should get "finish" at REPL but nothing happens?
>
> regards



reply via email to

[Prev in Thread] Current Thread [Next in Thread]