ruleset ruleset1{ } rule calculateFib1{ when{ ?f:fib.Fib(?n:number;?v:value;?n==1;?v==0); } then { modify ?f{value = 1;} } } rule calculateFib2{ when{ ?f:fib.Fib(?n:number;?v:value;?n==2;?v==0); } then { modify ?f{value = 1;} } } rule MakeRecursiveGoal{ priority = high; when{ ?f:fib.Fib(?n:number;?v:value;?n>1;?v==0); not fib.Fib(?n1:number;?n1==?n-1); } then { insert fib.Fib(?n-1); } } rule computeValue{ when{ ?f:fib.Fib(?n:number;?v:value;?n>2;?v==0); ?f1:fib.Fib(?n1:number;?v1:value;?n1==?n-1;?v1!=0); ?f2:fib.Fib(?n2:number;?v2:value;?n2==?n-2;?v2!=0); } then { modify ?f{value = ?v1+?v2;} } } rule setResult{ when{ ?f:fib.Fib(?n:number;?v:value;?v!=0); } then { System.out.println(("Fib(" + ?n + ") =" + ?v)); } }