Note that the atom '[]' represents the empty list [], and is therefore converted to the empty string.
Apart from error handling, this is a shorthand for
text_to_string(Text, String) :-
( Text == [] -> String = ""
; atom(Text) -> atom_string(Text, String)
; string(Text) -> String = Text
; is_list(Text), Text = [C|_], atom(C) -> string_chars(String, Text)
; is_list(Text), Text = [C|_], integer(C) -> string_codes(String, Text)
).
Success:
text_to_string([0'a,0'b,0'c],S) % gives S=="abc".
text_to_string([a,b,c],S) % gives S=="abc".
text_to_string(abc,S) % gives S=="abc".
text_to_string("abc",S) % gives S=="abc".
text_to_string([],S) % gives S=="".
Fail:
text_to_string(abc,abc) % gives S=="abc".
Error:
text_to_string(T,S) % Error 4
text_to_string([a,B,c],S) % Error 4
text_to_string([a,0'b,c],S) % Error 5
text_to_string(123,S) % Error 5
text_to_string([a,bb,c],S) % Error 6
text_to_string([97,-1,99],S) % Error 6