Deutsch   English   Français   Italiano  
<v75sa5$19h6e$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: "B. Pym" <Nobody447095@here-nor-there.org>
Newsgroups: comp.lang.lisp
Subject: Re: Read-from-string
Date: Tue, 16 Jul 2024 13:24:22 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 55
Message-ID: <v75sa5$19h6e$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Tue, 16 Jul 2024 15:24:22 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="022eb7690727c66a55916ff0843f867b";
	logging-data="1361102"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18EmKLr7XvNxzcceYFVeICj"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:j9sFwQ5ByoGiRIQjBc9g+GgSMH4=
Bytes: 2285

Pascal J. Bourguignon wrote:

> >> words, but in reality I'll be reading from an input where the number
> >> of words is unknown to me. Is there a way to circumvent this "repeat
> >> 3", because it would be "repeat n" and n is unknwon (it's as many
> >> words that the string contains).
> >
> >
> > (with-input-from-string (s "lala tata bobo dada qwerty moo goo")
> >    (loop for token = (read s nil nil nil)
> >            while token
> >                collect token))
> >
> 
> (let ((data  "lala tata bobo dada nil qwerty moo goo"))
>   (with-input-from-string (s data)
>      (loop for token = (read s nil nil nil)
>              while token
>                  collect token)))
> -> (LALA TATA BOBO DADA)

Gauche Scheme

(use file.util)
(file->sexp-list "output.dat")


Another way:

(use gauche.generator)

(let ((data "lala tata bobo dada #f qwerty moo goo"))
  (with-input-from-string data
    (lambda()  (generator->list read))))

  ===>
(lala tata bobo dada #f qwerty moo goo)


Another way:

(let ((data "lala tata bobo dada #f qwerty moo goo"))
  (with-input-from-string data
    (lambda()  (collect-while list read))))

  ===>
(lala tata bobo dada #f qwerty moo goo)

Given:

(define (collect-while pred gen . opt-key)
  (let ((key (if (pair? opt-key) (car opt-key) values)))
    (do ((x (gen) (gen))
         (res '() (cons (key x) res)))
      ((or (eof-object? x) (not (pred x)))  (reverse res)))))