Looking forward to to your followup! Carl Eastlund
P.S. copying to the mailing list so everyone's in the loop. On Sat, Sep 21, 2013 at 8:25 PM, Jingjing Duan <[email protected]>wrote: > Hi Carl, > > Thanks for your great feedback. Let me try to rewrite the code, this time > by following the recipes from HTDP. Will send out another email once I'm > ready! > > Thanks, > Jingjing > > > On Sat, Sep 21, 2013 at 10:25 AM, Carl Eastlund <[email protected]> wrote: > >> On Sat, Sep 21, 2013 at 12:09 PM, Jingjing Duan >> <[email protected]>wrote: >> >>> Hi, >>> >>> I've been reading HTDP and I'm about half way through. To apply what >>> I've learned in the book to a bigger exercise, I decided to write a boggle >>> solver. >>> >>> You can find the code here: >>> https://github.com/jduan/boggle_scheme/blob/master/boggle.rkt >>> >>> Any feedback is greatly appreciated. I'm specifically looking for >>> feedback on: >>> >>> 1. Did I break the problem into right components? >>> 2. How can I make the code more idiomatic? >>> >> >> If you're halfway through HtDP, you should know the value of data >> definitions, contracts, and test cases. I don't see any of those in your >> program. That makes it very hard to tell what's going on in the code, and >> whether it's doing the right thing. Adding them after the fact should >> improve your code's readability. Adding them earlier -- during the design >> process of the code itself -- helps break things down into components in a >> natural way. >> >> >>> 3. Why is code so slow? It can take minutes to solve a 4 by 4 board. The >>> same board can be solved by a ruby program I wrote in much less time, like >>> a few seconds. I know recursive functions are a big reason but is there >>> anything? >>> >> >> "Recursive functions" have nothing to do with the kind of slowdown you're >> seeing. Your program is simply doing too much work. Start adding simple >> test cases for your functions and you may start to get a clearer idea of >> where a lot of the work is being done. The process of adding test cases >> may also suggest simpler ways to structure your program, both in terms of >> making it more idiomatic and in terms of doing less work. >> >> You might get a lot out of restarting this boggle exercise from the top >> down, starting with the function find-all-words and going through the >> design recipe step by step. You may be surprised how different the result >> is from what you've written, and how much more natural the solution you get >> is. In my own experience, it is also a much quicker process than taking >> something written as a whole without the design steps, and trying to add >> them in after the fact. >> >> However you proceed, please feel free to share your results and any other >> questions you have with the list. We love hearing about stuff like this! >> >> Thanks, >>> Jingjing >>> >> >> No problem. Glad to see you're interested in HtDP and Racket! Good luck! >> >> --Carl >> > >
____________________ Racket Users list: http://lists.racket-lang.org/users

