Erlang以外の言語にタームを直接送信するというのが、
まず不合理なような気がします。
Xについても、指定する理由が良く分かりません。

複雑に考えずに、
asciiコードの配列に純粋に変換してみてはいかがでしょうか。
区切りは、特殊な記号(例えば@など)で作ってみてはどうですか。

たとえば、append@12@34

append
@
12
@
34

として、prolog側で@を目印に分解すると都合が良さそうな気がします。

上記の方法だとlistsの関数を使って変数同士を合体させるのですかね。
append(ListOfLists) -> List1