пролог термин в строку - PullRequest
1 голос
/ 24 июля 2011

У меня есть список прологов, подобный этому:

[p(X,Y,Z),r(H,G,K)] 

и я хочу преобразовать его в это:

'p(X,Y,Z)r(H,G,K)'  

это просто список предикатов, который должен быть преобразован в строку.

Есть идеи? (Я использую пролог)

Ответы [ 2 ]

3 голосов
/ 24 июля 2011

Я думаю, что сделать это невозможно.После объявления переменной ее имя теряется для дальнейшей обработки.

РЕДАКТИРОВАТЬ:

Нечто подобное возможно, если вы не против потерять имена.По крайней мере, в SWI-Prolog:

?- format(atom(A), "~w~w", [p(X,Y,Z),r(H,G,K)]).
A = 'p(_G924,_G925,_G926)r(_G931,_G932,_G933)'.
0 голосов
/ 02 августа 2011

Вы можете прочитать термины, используя опцию variable_names, которая дает список пар Name = Variable в термине чтения. Так что, возможно, это то, что вам нужно.

Вот командная строка, которая читает термин, затем объединяет переменные с их именами и, наконец, выводит результат в атом так, как вы указали в своем вопросе.

?- read_term(Term, [variable_names(VarNames)]), maplist(call, VarNames),
                                with_output_to(atom(Atom), maplist(write, Term)).
|: [p(X,Y,Z),r(H,G,K)].
Term = [p('X', 'Y', 'Z'), r('H', 'G', 'K')],
VarNames = ['X'='X', 'Y'='Y', 'Z'='Z', 'H'='H', 'G'='G', 'K'='K'],
Atom = 'p(X,Y,Z)r(H,G,K)'.

Обратите внимание, что он изменяет условие чтения, поэтому вы можете сначала сделать его копию (copy_term/2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...