Re: message-driven function: more explanation
- To: mathgroup at smc.vnet.net
- Subject: [mg95642] Re: message-driven function: more explanation
- From: dh <dh at metrohm.com>
- Date: Fri, 23 Jan 2009 05:09:22 -0500 (EST)
- References: <gl9n6q$aus$1@smc.vnet.net>
Hi Bert, nothing exotic here. The return value is a function that consits of a Switch statement: changeCounter$448[msg$_String:++]:=Switch[msg$, "++",counter$448=counter$448+1;counter$448, "--",counter$448=counter$448-1;counter$448, "value",counter$448, "reset",counter$448=100;counter$448, _,Print[Unknown message to counter:,msg$];counter$448] As you see, the Switch simply compares the strings. hope this helps, Daniel Bert Aerts (rm X) wrote: > In the book Programming Paradigms with Mathematica > http://library.wolfram.com/infocenter/MathSource/1847/ > in the notebook Hw21.nb there is following function: > > Clear[makeCounter]; > makeCounter::usage="makeCounter[] returns a message-driven function > which manipulates a \"hidden\" counter variable. The initial value > of the counter variable may be set via an optional argument to > makeCounter (default is 0). Valid messages for the function are > \"++\" (increment), \"--\" (decrement), \"value\", and \"reset\". > For example, ctr = makeCounter[100]; ctr[\"value\"] returns 100."; > > makeCounter[ > defaultValue_Integer:0 > ] := > Module[ > { counter = defaultValue, > changeCounter > }, > changeCounter[msg_String:"++"] := > Switch[msg, > "++", > counter = counter + 1; counter, > "--", > counter = counter - 1; counter, > "value", > counter, > "reset", > counter = defaultValue; counter, > _, > Print["Unknown message to counter:", msg]; > counter > ]; > changeCounter > ]; > > ctr = makeCounter[100] > ctr["value"] > ctr["++"] > > gives as output > > changeCounter$723 > 100 > 101 > > Where can I find more explanation of this type of "message-driven function"? >