On Mon, Nov 15, 2010 at 4:17 PM, Peter Breitsprecher <pkbre...@lakeheadu.ca>wrote:
> I have a program that is a simple reader. Reads the user input character > by character, and then creates a list of values. Right now it only works > with numbers, but i will add functionality for reading characters. Right > now it will work, and just accept the numbers and create the list which is > great, but It won't work for nested lists at all. I don't think it should > be that difficult to modify it, but it is proving to be harder than I > anticipated. > > (define (read-list chr) > (define (read-list-helper list-so-far) > (let ((next-char (peek-char)) > (this-char (read-char))) > (cond [(char-numeric? next-char)(read-list-helper (cons > this-char list-so-far))] > [(or (eq? next-char #\') > (eq? next-char #\)) > (eq? next-char #\() > (eq? next-char #\space)) (read-list-helper list-so-far)] > [(reverse list-so-far)]))) > (read-list-helper '())) > What you want is (cons (read-list-helper '()) list-so-far) where you are trying to recursively parse the nested list. And for that you will need to separate the checking of #\( from #\space and #\). #\( starts the nest, skip #\space, and #\) returns from the current nesting. Note you'll need additional logic if you want to parse multiple numeric characters as a single number as well. HTH. Cheers, yc
_________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users