Prolog:将术语转换为字符串?

Prolog: Cast term into string?

我有一个 Prolog 程序,它生成这种形式的项:

:-op(803, xfy, →).

connect(X, Y, Result):-
    Result = (X → Y).

如果我现在调用 connect(a,b,R) 我的结果是 R = (a→b). 他们是否有可能将 (a→b) 之类的术语转换为 Prolog 中的字符串?

背景:我想使用 Python 中的结果。但是,如果我使用 swiplserver 或 pyswip 传输它,我会得到这种终端:→(a, b)。我希望通过这样的类型转换来解决这个问题。

在SWI-Prolog中,可以使用谓词term_string/2如下:

?- connect(a, b, T), term_string(T, S).
T =  (a→b),
S = "a→b". 

或者,您也可以使用 term_to_atom/2 or format/3:

?- connect(a, b, T), term_to_atom(T, A).
T =  (a→b),
A = 'a→b'.

?- connect(a, b, T), format(string(S), '~w', T).
T =  (a→b),
S = "a→b".

?- connect(a, b, T), format(atom(A), '~w', T).
T =  (a→b),
A = 'a→b'.