variable is not an instance variable

332 Views Asked by At

I made this factorial solver but all it outputs is:

  We've found a bug for you!
  6| let factorialNumber = 0;
  7| Js.log(factorial(factorialNumber));
(error here)8|  factorialNumber = factorialNumber + 1;
  9|}
The value factorialNumber is not an instance variable

The code

let rec factorial = (n) =>
  n <= 0
  ? 1
  : n * factorial(n - 1);
while (true){
  factorialNumber = 0
  Js.log(factorial(factorialNumber));
  factorialNumber = factorialNumber + 1
}
1

There are 1 best solutions below

1
On

In Reason, variables are immutable by default. You're also not declaring factorialNumber as a variable anywhere.

The changes needed to make this compile is:

  1. Declare the variable using let
  2. Make the variable a mutable reference using ref
  3. Access the value of the reference using ^
  4. Assign a new value to the reference using :=
while (true) {
  let factorialNumber = ref(0);
  Js.log(factorial(factorialNumber^));
  factorialNumber := factorialNumber^ + 1
}

This still doesn't make much sense, however, as you're still just running factorial(0) on every iteration. I suspect what you want is to move the declaration and initial assignment outside the loop, so that it's incremented by one on each iteration:

let factorialNumber = ref(0);

while (true) {
  Js.log(factorial(factorialNumber^));
  factorialNumber := factorialNumber^ + 1
}