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

Reply via email to