2013-06-03 2 views

ответ

17

Для атомов:

 
?-  atom_concat ('my ', 'atom', X). 
X = 'my atom'. 

Для струны:

 
:-  set_prolog_flag (double_quotes , chars). 
:-  use_module (library(double_quotes)). 

?-  append ("my ", "string", X). 
X = "my string". 

Это мне потребовалось некоторое время, чтобы найти правильные имена. Может быть, это тоже поможет другим.

+1

Вы должны использовать 'string_concat/3' вместо' append/3' для строк, как описано в ответе @KaitlinHipkin. – morxa

+1

@morxa: Я использовал пролог sicstus в то время. Таким образом, нисходящее движение является довольно суровым, поскольку в прологовом распределении нет такой функции. :-) –

+0

ответ подсказывает, что это лучший способ для всех реализаций Prolog, вы никогда не говорите, что это для сикстуса. Afaik, append/3 также не является ISO. Установка double_quotes в символы может нарушать приложения. Даже если вы не хотите использовать 'string_concat/3', лучше использовать комбинацию' atom_string/2' и 'atom_concat/3'. – morxa

2

Это простое решение, которое не слишком усложняет ситуацию.

Для добавления атомов, используйте atom_concat/3 предикат:

A='my ', 
B='atom', 
atom_concat(A, B, FinalAtom). 

Для добавления строк, используйте string_concat/3 предикат:

A="my ",  % single quotes also work 
B="string", 
string_concat(A, B, FinalString) 

Обе ссылки идут на страницы официального SWI -Прологическая документация.

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