Пролог - список CharCodes в строку или символы

у меня есть список кодов символов в prolog.

Я хотел бы изменить их в символы.

например,

L = "abc" возвращает L = [97,98,99]

предполагая, что я начну с L = [97,98,99]

есть ли в любом случае, чтобы преобразовать L обратно в abc, так что, если существует метод

convert(L, X) возвращает X = abc

спасибо.

3 ответов


дано L="abc", convert(L, X), X = abc Я бы сказал, что вы хотите сделать атом (см. описание типов данных) из строки пролога. Я думаю, вы хотите atom_codes/2 или что-то подобное. Он должен работать как L="abc", atom_codes(X, L). по данным док.

к сожалению, в настоящее время у меня нет SWI-Prolog в моей системе. Но вот YAP, которая содержит atom_codes/2

YAP 6.3.2 (x86_64-linux): Sat Sep  1 08:24:15 EEST 2012
MYDDAS version MYDDAS-0.9.1
?- L="abc", atom_codes(X,L).
L = [97,98,99],
X = abc

Не забывайте также, что если вам нужно вывести строку, вам это не нужно быть преобразованным в атом. См.формат / 2 в SWI (или в YAP)

?- L="abc", format("~s~n", [L]).
abc
L = [97,98,99]

использовать char_code(?Atom, ?ASCII) в списке карт.

char_code(?Атом ?ASCII) преобразование между символом и значением ASCII для один символ. (16)

источник


символы представлены в виде атомов длины 1. Вы можете произвести их:

  • во время чтения, изменив флаг Prolog double_quotes. Подробнее см. этой и это ссылка.

    :- set_prolog_flag(double_quotes, chars).
    
  • динамически, вы можете использовать atom_codes/2 и atom_chars/2. Или вы можете использовать char_code/2 напрямую.