If the stream is a terminal, the tyo/2 output goes directly to the stream, whereas the output from put/2 is buffered first, and is only output to the stream when the output is flushed (e.g. explicitly using flush/1).
If the stream is not a terminal, tyo/2 behaves like put/2.
Character codes for the non-printable characters (i.e. control characters) are also acceptable.
Success:
?- set_stream(screen,output),
tyo(screen,91),tyo(screen,97),
tyo(screen,93).
[a]
yes.
?- put(screen, 0'a), tyo(screen, 0'b),
put(screen, 0'c), tyo(screen, 0'd).
bdac
yes.
?- write(screen,i), tyo(screen, 0'h).
hi
yes.
Error:
tyo(Stream,A). (Error 4).
tyo(output,a). (Error 5).
tyo(98.0,output). (Error 5).
tyo("string", A). (Error 5).
tyo(11,97). (Error 192).
tyo(atom,97). (Error 193).