1+2 => 3
a+2 => a2
'1'+2 => '12'
number('1')+2=>3
3-2 => 1
3-a => '3-a'
'3'-2 => '3-2'
number('3')-2=>1
if Y is numeric, and X is non-numeric, concatenate X Y times
2*2 => 4 a*2 => aa 2*a => '2*a' '2'*2 => '22' foo*(2*2) => foofoofoofoo
If either argument is non-numeric, returns an atom from concatenating X and Y with "/" as separator
6/2 => 3 a/b => 'a/b' '6'/2 => '6/2'
If either argument is non-numeric, returns an atom from concatenating X and Y with "**" as separator
2**3 => 8 2**'3' => '2**3'
[a b c]++[d e f] => [a b c d e f]
-2 => -2 -2 * 2 => -4 -'2' => '-2' -'2' * 2 => '-2-2'
/1 => '/1' /x/y/z => '/x/y/z'
foo >& 'foo.err' => 'foo>&foo.err'
a.b => 'a.b' a.b.c => 'a.b.c'
number('1') => 1
number(1) => 1
number(a) EXCEPTION
Exceptions: as prolog atom_number/2