def factorial( n ) | n >= 0 = def fact( acc, 0 ) = acc fact( acc, n ) = fact( acc*n, n - 1 ) fact( 1, n ) | otherwise = error( 'factorial: n should be non-negative' )