Получение списка значений ASCII от term в Prolog - PullRequest
0 голосов
/ 08 мая 2018

Я использую SWI-Prolog версии 7.6.3, и недавно я столкнулся с проблемой преобразования термина, объединяющего число и алфавит, в его список значений ASCII.

Я знаю, что мы можем получить список значений ASCII конкретного термина, используя предикат name/2. Например, если я хочу получить значение ASCII для термина ab или 'ab', тогда мы можем использовать name(ab,X). Пролог просто выводит X = [97, 98], 97 и 98 соответственно значения ASCII a и b.

Предикат name/2 также работает для чисел. Если я хочу получить значения ASCII для термина 123 или '123', тогда мы можем использовать name(123,X). И снова Prolog просто выводит X = [49, 50, 51], где 49, 50 и 51 - соответственно значения ASCII 1, 2 и 3.

Однако предикат name/2 не работает, если я объединю число и алфавит в одном термине. Например, я ожидаю, что name(2a,X) вернет X = [49, 97], а name(3b,X) вернет X = [50,98]. Однако интерпретатор выдает ошибку, сообщая, что ожидается оператор.

Я замечаю, что проблема возникает, только если термин начинается с цифры. Я проверяю в интерпретаторе, что name(a2,X) возвращает X = [97, 49], как и ожидалось.

Как мне решить эту проблему? Или это условие по своей сути не может быть обработано в Прологе?

1 Ответ

0 голосов
/ 08 мая 2018

3a не является атомом Пролога. Чтобы сделать это атомом, напишите его в одинарных кавычках:

'3a'

Кроме того, проверьте atom_chars/2, чтобы связать атомы со списками символов !

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