guard fix: two successive 'when' means boolean 'OR' not 'AND'

is_integer(n) will match and make any call to Factorial.of with a negative value infinite