実際には、Stringであるかatomであるかはほとんど気にせず使っている。理由は、

?- read_line_to_string(current_input,S),sub_atom(S,0,1,_,X).
|: 山下
S = "山下",
X = 山.

のようにsub_atom/5やatom_concat/3を介すると自動的にatomに変換されてしまう。
ほとんどの文字列処理ではこれらの組込述語を使うことになるためStringとatomについて心配する必要がない。
ただし、
?- read_line_to_string(current_input,S),assertz(S).
|: 山下
これはエラーになる。Stringを述語名に持ってくることはできない。