Математически, n! = (n-1)! * п. Если я не понимаю вещи (что возможно; я не знаю ML), ваша функция всегда будет возвращать 1, потому что она никогда не умножается на n.
fun factorial 0 = 1 |
factorial n = n * factorial(n-1);
Я не знаю, как вы возвращаете вещественное, а не целое число, или этот код вообще делает это, но по крайней мере это должно дать вам правильное значение.