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
