guile-devel
[Top][All Lists]
Advanced

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

Re: expression and definition context in Scheme


From: Damien Mattei
Subject: Re: expression and definition context in Scheme
Date: Sun, 4 Sep 2022 10:08:24 +0200

i finalize my ideas about 'controls' and loops (with break and continue, as while feature them ,even if scheme and macro do not allow ? (if someone else have idea and solution about it?) implements of 'continue and 'break because hygiene forbid it)
https://github.com/damien-mattei/library-FunctProg/blob/master/while-do-when-unless.scm

;; scheme@(guile-user)> (for/break-cont break continue ({i <+ 0} {i < 5} {i <- {i + 1}}) {x <+ 7} (display x) (newline))
;; 7
;; 7
;; 7
;; 7
;; 7

;; scheme@(guile-user)> (for/break-cont break continue ({i <+ 0} {i < 5} {i <- {i + 1}}) {x <+ 7} (display x) (newline) (break))
;;7

;; scheme@(guile-user)> (for/break-cont break continue ({i <+ 0} {i < 5} {i <- {i + 1}}) {x <+ 7} (continue) (display x) (newline) (break))

(define-syntax for/break-cont
 
  (syntax-rules ()
   
    ((_ <break-id> <continue-id> (init test incrmt) b1 ...)

     (call/cc (lambda (<break-id>)
(let ()
 init
 (let loop ()
   (when test
 (call/cc (lambda (<continue-id>) b1 ...))
 incrmt
 (loop)))))))))

https://github.com/damien-mattei/library-FunctProg/blob/master/for-next-step.scm

Damien

On Thu, Sep 1, 2022 at 10:21 PM Damien Mattei <damien.mattei@gmail.com> wrote:
On Wed, Aug 31, 2022 at 5:29 PM Maxime Devos <maximedevos@telenet.be> wrote:

On 31-08-2022 09:01, Damien Mattei wrote:
> I always try to keep compatibility with RnRS and in fact except cond
> none of when, unless, cond, case, while, and do are in standart RnRS schem

'when', 'unless' and 'do' are actually RnRS, see (rnrs control).

oh your're right...i was sticked to R5RS ,time i was student...

'case' is also RnRS, see (rnrs base).

However, looking at (guile)while do, 'while' is indeed non-standard.

and i had rewritten last week a 'while ... do' like in C or Pascal:

in my Scheme+:

;; (define do '())
;; (while {i < 4}
;;    do
;;      (display i)
;;      (newline)
;;      {i <- {i + 1}})
;; 0
;; 1
;; 2
;; 3
;; $1 = #f
(define-syntax while
  (syntax-rules (while do)
    ((_ pred do b1 ...)
     (let loop () (when pred b1 ... (loop))))))

i will have to forget it! as i want to keep compatibility with standard Scheme also but i will rewrite all with (let () ...) instead of (begin ...) unless it can cause some incompatibilities, for now , i do not see problems as "who can do more can do less"......

Regards,
Damien


reply via email to

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