Please write a Prolog program that calculates the factorial of a given number using a tail recursive predicate. Ensure that the program can handle both positive and negative input values, and that it outputs the result to the user in a clear and concise manner. It is also recommended that you use good coding practices, including commenting your code and breaking it down into logical and easily-readable segments.
This prompt doesn't seem malicious.