Please don't post solutions to problems on the public mailing list. I just assigned this problem to my students this past week and it's rather annoying to have the solution easily available on the public group page! Thanks, --- nadeem
On Tue, Nov 2, 2010 at 11:57 AM, Sam Griff <sgrif...@gmail.com> wrote: > Here is my solution to a modified version of DNAprefix from exercise 17.6.6. > I feel like it *should* be able to be written more clearly/simply but I > can't think of the logic to make it work properly: > > Modify DNAprefix so that it returns the first item beyond the pattern in the > search-string if the pattern is a proper prefix of the search-string. If the > lists do not match or if the pattern is no shorter than the search-string, > the modified function should still return false. Similarly, if the lists are > equally long and match, the result is still true. > > (check-expect (symbol=? (DNAprefix (list 'a 't) (list 'a 't 'c)) 'c) true) > (check-expect (not (DNAprefix (list 'a 't) (list 'a))) true) > (check-expect (DNAprefix (list 'a 't) (list 'a 't)) true) > > ;; DNAprefix : list-of-symbols list-of-symbols -> boolean > ;; to check if pattern is a prefix of the search-string > (define (DNAprefix pattern search-string) > (cond > [(and (empty? search-string) (not (empty? pattern))) false] > [(and (empty? search-string) (empty? pattern)) true] > [(empty? pattern) (first search-string)] > [(boolean? (DNAprefix (rest pattern) (rest search-string))) (and > (symbol=? (first pattern) (first search-string)) (DNAprefix (rest pattern) > (rest search-string)))] > [else (DNAprefix (rest pattern) (rest search-string))])) > > _________________________________________________ > For list-related administrative tasks: > http://lists.racket-lang.org/listinfo/users > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users