Hello, I use state machines a lot in my programs (in other languages). I am trying to understand how I can use J for those purposes. I have read the Sequential Machines and Huffman Coding labs. But I am unable to see how to solve this toy problem (without using regexp):
Input alphabet {a,b,c} I want to replace runs of 'a' with the word 'alpha', runs of 'b' with the word 'beta', and leave the 'c's unchanged. For example, abbbbaaacccaaaaabbbb becomes alphabetaalphacccalphabeta. The state diagram is like this, where the arcs are labelled as inp/out. [Cannot inline image] I have created the input map successfully (not sure if it is a good way, though): makemap =. 3 : '+/ (>:i.#y) *"0 1 a.="1 0 y' m=.makemap 'abc' I guess that this can be achieved using only outputs 0 and 2, since I am just interested in the runs. Also, since the output is not just a part of the input, f must be 2 or 3 or 4. But I am stuck at this point. If I use f=.2, then I can get a list of boundaries of all the runs. If I have to write another verb that will convert this list to the desired output, then basically I have to implement a simplified version of the same state machine inside that verb, which does not look good. f=.3 does not look promising either, since for 'c' I need to know the length of the run. How should I proceed? Thanks and regards, Arnab ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm