Statefulness = "Processness"...?
    Jay Nelson 
    jay@REDACTED
       
    Thu Mar 13 05:27:21 CET 2003
    
    
  
Chris Pressey wrote:
 > I'd just use a stack for undo. A stack being a 'naturally
 > backwards' list.
A stack of strings?  Or a stack of character stacks?
The obvious would be a stack of strings, but every char
you add means a copy of the string plus one char to be
pushed on the stack.  With a stack of character stacks
you have to have a function that puts them together into
a string that you return when any version is requested.
Basically, anything you do needs a history of how this
state was arrived at either by retaining a copy of all the
states or by retaining a copy of all the edits performed.
 > My idea of the implicit 'undo' in a functional language
 > results from the recursion itself, and doesn't require a list
This is non-obvious to the style of programming I do.  It
has a few drawbacks, the main one being that you can't
manage the stack easily so you can't get back to a particular
version (e.g., imagine a text box with a pulldown that shows
every version of its state where you could select an older
one).
You still need a list, when the stack is unwound the
chars have to be accumulated into a list (which may be
partially built at each recursive call).  The code and
exceptions get a little hairy.  It may require resorting to
a catch / throw pair, a less than elegant solution. Cut
of several characters in the middle of the string is
particularly difficult.  Typing in the data is not a recursive
or inductive act, it is an unpredictable serialized sequence.
It is much easier and clearer to use accumulator(s) in
the recursion and the accumulator(s) look(s) like the record
I used.
 > The thing is, you can't do it this way with a textbox,
 > essentially because the textbox is shared.
Unless your definition of textbox is radically different than
a standard one, it is by nature a single-state device.  If two
processes want to change it, there are either two instances,
two closures with two views, or last changed view only.  So
I don't understand this statement.
jay
    
    
More information about the erlang-questions
mailing list