Discussion:
simple loop question
(too old to reply)
B. Pym
2024-09-03 07:29:30 UTC
Permalink
use LOOP to collect random integers into a list until the sum of that
list exceeds a constant (say 50).
(loop for x = (random 10) collect x sum x into y until (> y 50))
Gauche Scheme

(let1 y 0 (collect-till x (random 10) (> (inc! y x) 50)))
===>
(7 9 4 0 6 4 1 3 2 7 0 7 0 1)


Given:

(use srfi-27) ;; random-integer

(define random random-integer)

(define-syntax collect-till
(syntax-rules ()
[(collect-till v expr0 expr1)
(let ((res '()))
(let go ((v expr0))
(set! res (cons v res))
(if expr1 (reverse res) (go expr0))))]))

(collect-till x (random 10) (even? x))
===>
(7 1 6)
B. Pym
2024-09-04 00:47:21 UTC
Permalink
Post by B. Pym
use LOOP to collect random integers into a list until the sum of that
list exceeds a constant (say 50).
(loop for x = (random 10) collect x sum x into y until (> y 50))
Gauche Scheme
(let1 y 0 (collect-till x (random 10) (> (inc! y x) 50)))
===>
(7 9 4 0 6 4 1 3 2 7 0 7 0 1)
(use srfi-27) ;; random-integer
(define random random-integer)
(define-syntax collect-till
(syntax-rules ()
[(collect-till v expr0 expr1)
(let ((res '()))
(let go ((v expr0))
(set! res (cons v res))
(if expr1 (reverse res) (go expr0))))]))
(collect-till x (random 10) (even? x))
===>
(7 1 6)
Revision:

(collect-till (x (y 0)) (random 10) x (> (inc! y x) 50))

Given:

(define-syntax collect-till
(syntax-rules ()
[(collect-till (v (w x) ...) v-val collect test)
(let ((res '()) (w x) ...)
(let go ((v v-val))
(set! res (cons collect res))
(if test (reverse res) (go v-val))))]
[(collect-till v v-val collect test)
(collect-till (v) v-val collect test)]))

Loading...