[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
call/cc does not return a value
From: |
Damien Mattei |
Subject: |
call/cc does not return a value |
Date: |
Fri, 13 Sep 2024 08:52:18 +0200 |
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
- call/cc does not return a value,
Damien Mattei <=