2015-10-04 7 views
0

Я хочу использовать atom_chars/2 по выражению 3+4, но получаю
ERROR: atom_chars/2: Type error: 'atom' expected, found '3+4' (a compound).конвертировать соединение в атом в прологе

Я думаю, что если я могу добавить " " по обе стороны от соединения, он будет работать, например.

atom_chars("3+4", Result). 

но я не знаю, как я могу это сделать, или есть ли другие подходы к этому? Пожалуйста, дайте мне несколько советов.

EDIT: То, что я имею в виду, что вход должен быть 3+4, вместо '3+4', так что я хочу сделать, это написать предикат перед atom_chars/2 для преобразования 3+4 в '3+4'.

Например: для compound2atom(X,Y),

-?compound2atom(3+4,Y). 
Y='3+4'. 
+0

SWI Prolog имеет 'term_string/2', поэтому' term_string (Term, '3 + 4') 'даст' X = 3 + 4'. – lurker

ответ

0

Если вы используете SWI-Пролог, есть with_output_to/2 или format/3:

?- with_output_to(atom(A), write(3+4)). 
A = '3+4'. 

?- with_output_to(chars(C), write(3+4)). 
C = ['3', +, '4']. 

?- format(atom(A), "~w", [3+4]). 
A = '3+4'. 

?- format(chars(C), "~w", [3+4]). 
C = ['3', +, '4']. 

Но если вы посмотрите достаточно трудно, вы должны быть в состоянии найти некоторый предикат, который делает это, например term_to_atom/2.

Мои предпочтения склоняются к format/3.

+0

привет, я имею в виду, что вход должен быть '3 + 4' вместо' 3 + 4'', так что я могу сделать, чтобы преобразовать его? – Jackieduckie

+0

@Jackieduckie Посмотрите edit –

+0

Спасибо! Ваш ответ действительно полезен. – Jackieduckie

Смежные вопросы