name(?Constant, ?Chars)

If Constant is supplied, it should be an atom or number. Chars is unified with a list of character codes representing the "name" of the constant. These are precisely the characters that write/1 would write if asked to write Constant.

If Constant is a variable, Chars should be a proper list of character codes. If Chars looks like the name of a number, Constant will be unified with that number. The syntax for numbers that is accepted by name/2 is exactly the one that read/1 accepts. If Chars does not look like the name of a number, Constant will be unified with an atom.

This attempt to guess what sort of constant you want means that there are atoms that can be constructed by read/1 and by atom_chars/2, but not by name/2. name/2 is retained for backwards compatibility with DEC-10 Prolog, C-Prolog, and earlier versions of Quintus Prolog. New programs should use atom_chars/2 or number_chars/2, whichever is appropriate.

name/2 is a built-in predicate. library(strings) contains a predicate name1/2, which is identical to name/2 except that it reports errors in the same way as other library predicates.