Hi Arthur, This simplifies my code a lot! I will give it a try.
Thank you! Jinsong On Tue, Jul 12, 2016 at 11:45 PM, Arthur Maciel <[email protected]> wrote: > Jinsong, the closest solution I can think of is the read-lines procedure, > which returns a list of strings (each string a line read). > > http://api.call-cc.org/doc/extras/read-lines > > Supposing you have a number per line, you could use string->number to get > the result. > > An example would be: > > (define (read-all-lines filename) > (with-input-from-file filename > (lambda () > (map string->number (read-lines))))) > > Cheers, > Arthur > > > On Wed, Jul 13, 2016 at 12:07 AM, Jinsong Liang <[email protected]> > wrote: > >> Hi, >> >> I need to read a file (lines of numbers) into a list of lists with each >> line a list. I wrote the following function to do it: >> >> (define (read-all-lines file-name) >> (let ([output '()]) >> (let ([p (open-input-file file-name)]) >> (let f ([x (read-line p)]) >> (if (eof-object? x) >> (close-input-port p) >> (begin >> (set! output (cons (string-split x) output)) >> (f (read-line p)))))) >> (reverse output))) >> >> I have a few questions regarding the above code: >> >> 1. Is there an existing API to do the same thing? >> 2. Using set! seems not a lispy coding style. Is it true? >> 3. Any improvements I can make ? I bet there are tons. >> >> Thank you! >> >> Jinsong >> >> _______________________________________________ >> Chicken-users mailing list >> [email protected] >> https://lists.nongnu.org/mailman/listinfo/chicken-users >> >> >
_______________________________________________ Chicken-users mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/chicken-users
