Concept help
Alex Rice
alex at mindlube.com
Tue Feb 17 20:57:05 EST 2004
On Feb 17, 2004, at 6:08 PM, Thomas McGrath III wrote:
> Only the storage and retrieval of multiple items seems complicated
> especially since there seems to be a couple of different ways to go
> about it and I don't know the ins and outs of each to make a proper
> educated decision on the issue.
I'm not really sure what the requirements are- because you are not
being very specific with examples (and probably aren't allowed to)
That's OK though. Here are some ideas:
First idea)
Kind of like what Dar just now suggested. Use custom properties to save
the allowed button states as a "hashtable" or "dictionary".
-- if button 37 is clicked then:
put the uButtonDownState[ 37 ] of this stack into tState
-- tState could contain data like buttonNum=state,buttonNum=state, ...
-- 1=disabled,2=hidden,3=enabled,4=visible,..., etc.
repeat for each item tItem of tState
split tItem by "="
switch tItem[2]
case "disabled"
disable button item[1]
break
case "visible"
show button item[1]
...
...
end repeat
Second idea)
If there are many logical connections between many buttons then you are
talking about a many-to-many pattern matching problem. You will know it
when you have an explosion of if-then rules in trying to program the
rules of the system. I don't know if this is the problem in your
system. If it is, a rule based expert system like CLIPS is perfect
because it has a pattern matching engine than efficiently handles
many-to-many problems.
For example you could have a great number of rules like the following,
and CLIPS could always efficiently find the correct state of the
system.
(defrule button-dependency-n
(button (num 1) (depressed TRUE))
(button (num 2) (visible TRUE))
(button (num 3) (visible FALSE))
(button (num 4) (depressed FALSE))
?button <- (button (num 5) (visible FALSE))
=>
(modify ?button (visible TRUE))
)
The above CLIPS rule states in English: "If button 1 is depressed,
button 2 is visible, button 3 is hidden, button 4 is not depressed, and
button 5 is hidden, then button 5 should be made visible".
Note that changing the state of button 5 could have many dependencies,
and if so, other rules would fire consequently- CLIPS handles the
"activation agenda" (You don't need to check for dependencies yourself
that's what the CLIPS pattern matching engine does)
In the above example, the changing button 5 would result in a partial
activation of the following rule button-dependency-n2. If button 7
were depressed, then there would be a full activation and the rule
would fire:
(defrule button-dependency-n2
(button (num 5) (visible TRUE))
(button (num 7) (depressed TRUE))
=>
(printout t "bingo!")
)
Note that a CLIPS rule is merely an IF-THEN statement. The form is
(defrule rule-name
...IF...
=>
...THEN ...)
IF = LHS = left hand side of the rule
THEN = RHS = right hand side of the rule.
In procedural programming (Transcript, Basic, C, whatever) you would
have to test each of the If-thens, 1 at a time, which can be extremely
slow. Using CLIPS the procedural part the IF-THEN statement is
eliminated so the CLIPS engine instantaneously fires the rules that
match the current state of the system. Hope this helps give you some
ideas.
See also <http://mindlube.com/developer/revclips/>
--
Alex Rice | Mindlube Software | http://mindlube.com
More information about the use-livecode
mailing list