strange problem splitting one module in two

Damien Mattei damien.mattei@gmail.com
Fri Jun 14 08:58:37 GMT 2024


the problem was coming from mixing 2 syntax allowed by kawa in 2 different
modules:

i was using r7rs in one :

(define-library (range) ; R7RS

  (import (kawa base)
 (for_next_step))

  (export in-range
 reversed)




and kawa module in other:

(module-name for_next_step)

kawa dislike that, all is ok now:

one module ok:

#|kawa:1|# (require for_next_step_range)
/Users/mattei/Scheme-PLUS-for-Kawa/for_next_step_range.scm:47:8: warning -
void-valued expression where value is needed
#|kawa:2|# in-range
#<procedure in-range>
#|kawa:3|# (in-range 5)
(0 1 2 3 4)
#|kawa:4|# (for ((define i 0) (< i 3) (set! i (+ 1 i))) (display i)
(newline))
/dev/tty:4:58: warning - void-valued expression where value is needed
0
1
2
#!null
#|kawa:5|# (reversed (in-range 5))
(4 3 2 1 0)
#|kawa:6|# (exit)

two modules in r7rs ok:

(base) mattei@mbp-touch-bar Scheme-PLUS-for-Kawa % kawa
-Dkawa.import.path=".:/Users/mattei/Scheme-PLUS-for-Kawa:"
#|kawa:1|# (import (range))
/Users/mattei/Scheme-PLUS-for-Kawa/range.scm:64:8: warning - void-valued
expression where value is needed

#|kawa:5|# (in-range 5)
(0 1 2 3 4)
#|kawa:6|# (for ((define i 0) (< i 3) (set! i (+ 1 i))) (display i)
(newline))
/dev/tty:6:7: define is only allowed in a <body>
/dev/tty:6:28: warning - void-valued expression where value is needed
/dev/tty:6:46: warning - void-valued expression where value is needed
/dev/tty:6:58: warning - void-valued expression where value is needed
/dev/tty:6:2: warning - no declaration seen for for
/dev/tty:6:23: warning - no declaration seen for i
/dev/tty:6:28: warning - no declaration seen for i
/dev/tty:6:41: warning - no declaration seen for i
/dev/tty:6:55: warning - no declaration seen for i
#|kawa:7|# (import (for_next_step))
#|kawa:8|# (exit)
(base) mattei@mbp-touch-bar Scheme-PLUS-for-Kawa % kawa
-Dkawa.import.path=".:/Users/mattei/Scheme-PLUS-for-Kawa:"
#|kawa:1|# (import (for_next_step))
#|kawa:2|# (for ((define i 0) (< i 3) (set! i (+ 1 i))) (display i)
(newline))
/dev/tty:2:58: warning - void-valued expression where value is needed
0
1
2
#!null
#|kawa:3|#



On Fri, Jun 14, 2024 at 10:40 AM Damien Mattei <damien.mattei@gmail.com>
wrote:

> hello,
>
> i had a code that worked when in the same module but not split in 2 files
>
> i have this code  now in 2 modules:
>
>
> (module-name for_next_step)
>
> (export for)
>
>
> (include "increment.scm")
>
> ;; #|kawa:1|# (import (for_next_step))
> ;; #|kawa:2|# (for ((define i 0) (< i 3) (set! i (+ 1 i))) (display i)
> (newline))
> ;; /dev/tty:2:58: warning - void-valued expression where value is needed
> ;; 0
> ;; 1
> ;; 2
> ;; #!null
>
>
> (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 ((res 0)) ;; now we will return a result at the end if no
> break but if we continue? what happens?
>     (if test
> (begin
>   (call/cc
>    (lambda (next)
>      (set! res (let-syntax ((CONTINUE (identifier-syntax (next))))
>  (let () ;; allow definitions
>    body ...)))))
>   incrmt
>   (loop res))
> res)
>     ))))
>      ) ;; close syntax
>
>     )))))
>
> in for_next_step.scm
>
>
> (define-library (range) ; R7RS
>
>   (import (kawa base)
>  (for_next_step))
>
>   (export in-range
>  reversed)
>
>
>
> ;; |kawa:2|# (in-range 5)
> ;; (0 1 2 3 4)
> ;; #|kawa:3|# (in-range 1 5)
> ;; (1 2 3 4)
> ;; #|kawa:4|# (in-range 1 5 2)
> ;;(1 3)
> (define (in-range . arg-lst)
>   (define n (length arg-lst))
>   (when (or (= n 0) (> n 3))
> (error "in-range: bad number of arguments"))
>   (define start 0)
>   (define stop 1)
>   (define step 1)
>   (define res '())
>
>   (case n
>     ((0) (error "in-range : too few arguments"))
>     ((1) (set! stop (car arg-lst)))
>     ((2) (begin (set! start (car arg-lst))
> (set! stop (cadr arg-lst))))
>     ((3) (begin (set! start (car arg-lst))
> (set! stop (cadr arg-lst))
> (when (= 0 step)
>      (error "in-range: step is equal to zero"))
> (set! step (caddr arg-lst)))))
>
>   (define (arret step index stop)
>     (if (> step 0)
> (< index stop)
> (> index stop)))
>
>   (define i start)
>   ;;(for ((define i start) (arret step i stop) (set! i (+ step i)))
>   (for ('() (arret step i stop) (set! i (+ step i)))
>        (set! res (cons i res)))
>
>   (reverse res))
>
>
>
>
>
> ;; #|kawa:3|# (in-range 1 11 3)
> ;; (1 4 7 10)
> ;; #|kawa:4|# (reversed (in-range 1 11 3))
> ;; (10 7 4 1)
> ;; #|kawa:5|# (in-range 8 1 -2)
> ;; (8 6 4 2)
> ;; #|kawa:6|# (reversed (in-range 8 1 -2))
> ;; (2 4 6 8)
> ;; #|kawa:7|# (in-range 8 1 -1)
> ;; (8 7 6 5 4 3 2)
> ;; #|kawa:8|# (reversed (in-range 8 1 -1))
>
> (define reversed reverse)
>
> ) ; end module
>
> in range.scm
>
> when all was in one file i had no error
>
> now for works:
> #|kawa:1|# (import (for_next_step))
> #|kawa:2|# (for ((define i 0) (< i 3) (set! i (+ 1 i))) (display i)
> (newline))
> /dev/tty:2:58: warning - void-valued expression where value is needed
> 0
> 1
> 2
> #!null
>
> but when i use range, error:
>
> (base) mattei@mbp-touch-bar Scheme-PLUS-for-Kawa % kawa
> -Dkawa.import.path=".:/Users/mattei/Scheme-PLUS-for-Kawa:"
> #|kawa:1|# (require range)
> /Users/mattei/Scheme-PLUS-for-Kawa/range.scm:61:9: define is only allowed
> in a <body>
>
> the problem is with that line:
>
> (for ((define i start) (arret step i stop) (set! i (+ step i)))
>        (set! res (cons i res)))
>
> now define is forbidden but it worked when all was in a file
>
> so i have to make this (see code more above):
> (define i start)
>   ;;(for ((define i start) (arret step i stop) (set! i (+ step i)))
>   (for ('() (arret step i stop) (set! i (+ step i)))
>        (set! res (cons i res)))
>
> seems kawa do not understand that (define i start) is used in a macro ,not
> a procedure.
>
> i do not know where the problem comes , i know it was working for years
> and now it is broken...
>
> regards,
>
> damien
>
>


More information about the Kawa mailing list