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