On Friday, September 4, 2015 at 1:34:38 AM UTC-4, Linh Chi Nguyen wrote: > Wow as much as i appreciate and try to see through all the answers, i have to > confess that i'm a first year Phd student in economics. So writing macro is > too far for me now. > > I'd just process with struct.. And see how expensive it is for my agent based > model. Hopefully i can show you the code some day, regarding all these > suggestions, if still relevant. > > Thank you, > Chi > > On 04/set/2015, at 03:25, mrmyers.random.suf...@gmail.com wrote: > > > On Thursday, September 3, 2015 at 10:29:33 AM UTC-4, Linh Chi Nguyen wrote: > >> Dear All, > >> I'm a complete newbie in racket and need help in coding finite state > >> machine/automata. Please pardon any of my ignorance. Hi Linh.
One problem with doing things that way is that it creates a lot of temporary things that need to be cleaned up. The nice thing about a finite-state-machine is that you only need to keep track of one thing (current state) while it runs. In the code I linked above, a finite state machine (I use "dfa" or "deterministic finite automata") is defined as something with a 'transition function' δ(p,a) = q which, given a state p and symbol a, returns a new state q. It also has to have an initial state, and an accept? function to determine which states are to be accepted. I also wrote some helpful macros to make defining one a lot easier. You can write (define M (dfa (alphabet: '(a b)) (table: [sa : x sb] [sb : sa x] [x : x x]) (start: sa) (accept: sb))) (in-machine? M '(a b a b a b)) to accept only lists that contain alternating seqences of 'a followed by 'b. If you make your alphabet a string or list of characters, it can scan strings or lists of characters for acceptance instead. If the alphabet had been "ab", everything else could be kept the same, but you could write (in-machine? M "ababab") You can use symbols, numbers, or whatever you'd like to represent states, just list the transitions for each state in the order of the alphabet you supplied. Lastly, if you're not just interested in whether it accepts or not, and want to know the final state, use (extended-transition M s1 '(a b a b a b)) -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.