• Re: simple loop question

    From B. Pym@Nobody447095@here-nor-there.org to comp.lang.lisp on Sat Jul 5 12:15:24 2025
    From Newsgroup: comp.lang.lisp

    B. Pym wrote:

    Lars Brinkhoff wrote:

    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

    (use srfi-27 :only (random-integer))
    (define random random-integer)

    Not too efficient.

    (collect-till (_ z) (random 10) (> (apply + z) 50))


    Given:

    (define-syntax collect-till
    (syntax-rules ()
    [ (collect-till (x bag) expr test)
    (collect-till (x bag) expr test #f) ]
    [ (collect-till (x bag) expr test include-ender)
    (let go ((bag '()))
    (let ((x expr))
    (if test
    (if include-ender
    (reverse (cons x bag))
    (reverse bag))
    (go (cons x bag))))) ]
    [ (collect-till x expr test)
    (collect-till (x bag) expr test) ]
    [ (collect-till x expr test include-ender)
    (collect-till (x bag) expr test include-ender) ] ))
    --- Synchronet 3.21a-Linux NewsLink 1.2