In these examples a fibonacci calculator is created using nools.
Both of the examples declare the same set of rules.
Recurse- This rule creates aFibonacciinstance for each number up to the calculated value (e.g. 1,2,3,4,5,6,7,8,9,10)Bootstrap- This rule looks for anyFibonacciinstance that have a value equal to -1 and a sequence of 1 or 2 and sets it to 1.Calculate- This rule looks for the subsequent Fibonacci instances (f1,f2,f3) withf3not being calculated. This rule will used the values off1andf2added together to calculate the value off3.
For example given the number 5 to calculate the rules will fire in this order.
Recurse f1: Fibonacci { sequence: 5, value: -1 } } // asserts Fibonacci { sequence: 4, value: -1 }
Recurse f1: Fibonacci { sequence: 4, value: -1 } } // asserts Fibonacci { sequence: 3, value: -1 }
Recurse f1: Fibonacci { sequence: 3, value: -1 } } // asserts Fibonacci { sequence: 2, value: -1 }
Recurse f1: Fibonacci { sequence: 2, value: -1 } } // asserts Fibonacci { sequence: 1, value: -1 }
Bootstrap f: Fibonacci { sequence: 1, value: -1 } } // modifies f.value = 1
Bootstrap f: Fibonacci { sequence: 2, value: -1 } } // modifies f.value = 1
Calculate // modifies f3 by setting the value to 2
f1: Fibonacci { sequence: 1, value: 1 },
f2: Fibonacci { sequence: 2, value: 1 },
f3: Fibonacci { sequence: 3, value: -1 },
Calculate // modifies f3 by setting the value to 3
f1: Fibonacci { sequence: 2, value: 1 },
f2: Fibonacci { sequence: 3, value: 2 },
f3: Fibonacci { sequence: 4, value: -1 }
Calculate // modifies f3 by setting the value to 5
f1: Fibonacci { sequence: 3, value: 2 },
f2: Fibonacci { sequence: 4, value: 3 },
f3: Fibonacci { sequence: 5, value: -1 }
To run this example run the following command in the root of the project.
npm run fibonacci:fibonacci-dsl-example [number=10]Expected Output:
fibonacci-dsl-example: Example 1 - [number=10] [result=55]
npm run fibonacci:fibonacci-programmatic-example [number=10]Expected Output:
fibonacci-programmatic-example: Example 1 - [number=10] [result=55]