On 7/17/2020 8:19 PM, Hendrik Boom wrote:
Yes,  I know the functino for reading s-expressions seems to be (read [in]).

I want a loop that reads S-expressions and does something to each one, until 
there are no more to be found in a file.

Now of course that's absurdly easy to do with a tail-recursice loop.

But I's like it to look like a loop, with (for ...) or (while ...) or
(loop ...) or something like that.

But I fail to fine any iterators that process a file, such as (in-file
...)

There's a long list of iterators in
    https://docs.racket-lang.org/reference/for.html
and in
    https://docs.racket-lang.org/guide/for.html

An I just looking in the wrong place, or are there really no iterators
for reading a stream of s-expressions from a file.

-- hendrik

This should work if you're reading the sexprs for value:

(with-input-from-file /filename/
  (lambda ()
    (for [(expr (read))]
      :
    )))

If your intent is to read/parse the sexprs as text, there isn't a simple way to do that.  Regex is problematic for nested expressions ... you could try "read-syntax" if you are familiar with macros, or "match" if you know what patterns to look for.

There's no "in-match" sequence, so if you want a loop that *appears* simple [match in the /"for-clause"/], you'll have to write some glue: a helper that returns one match result at a time so as to plug nicely into a loop.

George

--
You received this message because you are subscribed to the Google Groups "Racket 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/7184da64-a388-91bf-e027-a213a3d66c73%40comcast.net.

Reply via email to