Я использую 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]
, как и ожидалось.
Как мне решить эту проблему? Или это условие по своей сути не может быть обработано в Прологе?