Hi Gary, just to make sure ... I suppose that You plan to keep both branches 6.3x and 6.4x up-to-date and in case You had to decide which branch to discontinue, it would be the 6.3x? Thanks Vranoch
finally ... #define TokenType _TokenType #define GetFocus _GetFocus #include "windows.h" ... the purpose sanctifies the means ;-)
Hi Gary, trying to upgrade my 6.3x based code (mixed C/C++) on MVC (Visual C++ 2017) to 6.4x CLIPS sources but I encounter bunch of compilation issues on C++ sources. Namely: 1>d:\projects\erian\local\develop\git\libraries\komix.erian.esc.core\core\scanner.h(70): error C2365: 'TokenType': redefinition; previous definition was 'enumerator' 1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um\winnt.h(10650): note: see declaration of 'TokenType' on any C++ source icluding ATL (atlbase.h)...
Hi Gary, what is the situation 6.4? Is it already "stable" or is it still kind of "beta" or so? Thanks Vranoch
Hi Gary, I noticed another problem when trying to load a very complex rule. It just runs out of memory. It does not seem to fall into an infinite recursion, it just keeps allocating memory during the Reordering phase but seems to explode with growing number of CEs. Despite the fact that this specific rule may not be meaningful, I have the following 2 questions: 1) Isn't there some memory leak causing to consume 10+ Gigs if allowed or is it just a correct behaviour? 2) In case it is not a bug, what...
Hi Gary, I have a guestion concerning performance impacts of the garbage collection when asserting lots of facts before actually executing the rules. Is it more efficient to (allow the GC to be executed only once) : EnvIncrementGCLocks() Loop EnvAssertString() EndLoop EnvDecrementGCLocks() than to (allow the GC to be executed X times - after each Assert)? Loop EnvAssertString() EndLoop Thanks Vranoch
Hi Gary, could You give me some rough idea how to estimate the expected complexity of the constructed rule to decide whether it is feasible to load in the given form or whether it already exceeds some limit and it should be written in some other way. Namely how to estimate the complexity of nested ORs, EXISTSs and TESTs. Thanks Vranoch (defrule V_if "" (M ?m) (DD ?dd) (DR ?m KD ?kd) (LVAR var1 ?var1) (DR ?m RL K ?k) (exists (or (test (eq ?kd "10")) (or (test (eq ?dd "02")) (test (eq ?dd "99")) )...
Hi Gary, Thanks for the clarification. This construction comes from a logical expression optimizer whose purpose is to reduce the risk of runtime complexity of rules (result of my former post). It converts the original expression to DNF (Disjunctive Normal Form) - (AND (OR) (OR) (OR)) so that it is flat and then tries to reorder individial OR groups and expressions within each OR group and respective catching of facts in such a way that each group is preceded only by necessary facts reducing the...
The explosion actually starts MUCH earlier than for such a huge rule. See the following simplified rule. If You start uncomenting the commented-out ORs, You first get a significant memory increase and then a StackOverflow. Thanks Vranoch (defrule V_if "" (M ?m) (DD ?dd) (DR ?m KD ?kd) (LVAR var1 ?var1) (DR ?m RL K ?k) (exists (or (test (eq ?kd "10")) (or (test (eq ?dd "02")) (test (eq ?dd "99")) ) (test (eq ?var1 "P")) (test (eq ?var1 "M")) ) (or (or (test (eq ?k "1")) (test (eq ?k "2")) ) (test...
OK, got it. Thanks Vranoch
Hello Gary, could You please explain me, why the following 2 rules behave differently (A fires and B does not) on the same facts? They differ just in the order of one fact. Thanks Vranoch (deffacts XY (LVAR LV-arr 1 "A") (LVAR LV-arr 1) (LVAR LV-arr 2 "B") (LVAR LV-arr 2) (LVAR LV-arr 3 "A") (LVAR LV-arr 3) (LVAR LV-arr 4 "A") (LVAR LV-arr 4) (IX X1 1) ) (defrule A "" (forall ; (LVAR LV-arr ?IX_1 ) (IX X1 ?X1) (LVAR LV-arr ?IX_1 ) (LVAR LV-arr ?X1 ?X1_var) (LVAR LV-arr ?IX_1 ?IX_1_var) (test (eq...
The (test ) expressions are in a reality not duplicated, they test different fact variables - I only hypersimplified the rule in order to fit into the memory. I will try to achieve something like V3663_A2_E1004_1_if-3 but for that I need to convert the complex boolean expression to a DNF (Disjuncrive normal form (AND (OR) (OR))) or to a CNF (Conjunctive normal form (OR (AND) (AND))) in order to be able to efficiently reorganize the expression and perhaps extract parts of it and place in between facts....
Thanks a lot Gary, Since the rules are generated I do not have an easy control over their structure. I will have to create some mechanism to reorder the LHS elements. Namely CEs will not be easy. I think about converting all complex AND / OR conditions to simple (NOT) ANDs and then simply reordering them. Is there any performance difference between OR and AND NOT? Is there any other hidden issue that needs some special treatment? Thanks Vranoch
Hello Gary, I encountered an OutOfMemory issue when processing a large set of facts with my ruleset. I isolated the rule causing the problem. I simplified it so that it does not make a big sense but the essence remains. WIth the factset it easily gets over 2GB of memory and then fails. I understand that such inference is generally a very memory consuming task since it yealds a cartesian product however, isn't there a way how to reduce it? For example I noticed that adding facts to the LHS side (even...
Hello Gary, I found that for more complex expressions the inicialization of the pretty print buffer overflows. The original buffer size is 120 characters, I patched it in my copy to 1024. Isn't there any way to make it not hard-coded? Thanks Vranoch file: pprint.c globle void PPCRAndIndent( void *theEnv) { int i; **char buffer[1024];**
OK, thanks for info. Btw what are the main differences between 6.30 and 6.40 (and...
Hi Gary, What is the status of the 64x branch? Is it still in a pre-beta state or...
Thanks for a clarification Gary. Vranoch
The ITERINDEX is just a technical support fact - iteration controll fact. The aim...
Hi Gary, I met some for me strange behaviour of the FORALL quantifier. Could You...
I already upgraded my application to the 6.40 code, shall I revert all changes back...
Thanks a lot Gary, I will check it tomorrow. What was the problem? What kind of construction...
Hi Gary, I found another case on which CLIPS (tested on v6.30 and also on a brand...
Can You please help me with the following rule: (defrule XY (or (test (eq "|3000|12|31|0|0|0|"...
Thanks a lot Gary, What was the problem, what combinations of expressions were affected...
Hi Gary, I found another occurrence of this problem: rule: (defrule if "" (exists...
Hi Gary, how is fuzzyclips compatible/aligned with current version of clips? I saw...
Hi Gary, I found a new problem. When I call (assert-string ) from in the CLIPS program,...
Thanks Gary, what was the problem?
Hi Gary, I found after some time another case which causes CLIPS to crash in the...
Hi Jerome, We accidentally started building some pilot for computing pensions in...
Hello, I wanted to ask about a behaviour of the forall element. When referred facts...
Thanks a lot - You fixed it very quickly. What was the problem? I did some testing...
I discovered a problem (inconsistency) in BLOADing the previously BSAVEd image. This...
Hi Gary, I tried to create a new thread through the e-mail functionality (none other...
Hi Gary, I did quite a lot of testing and everything seems OK now. Thanks a lot for...
Thanks Gary, I know that this is quite a complex task with a lot of variants. Cross...
Hi Gary, do You hav any estimation how long can such review take? I'm just asking...
Hi Gary, I checked the fix and it looks OK. Could You also look at the other issue?...
Thanks a lot Gary, I will test it. I do not know the nature of this problem but did...
Hi Gary, I have another occurrence of (probably) this problem. The following rule...
Hi Gary, it looks like Your last bugfix introduced another bug. At least for me (having...