Integer как object_identifier в Logtalk - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть протокол студентов:

:- protocol(student).
    :- public([
        name/1,
        surname/1,
        studies/1,
        marks/1
    ]).
:- end_protocol.

Теперь я хочу создать объект, имя которого является идентификатором (целое число), но когда я пытаюсь сделать это с create_object(18342, [implements(student)], [], [name(john), surname(smith), studies(it), marks(ok)]).

swilgt выдает mi ошибку:

ОШИБКА: ошибка типа: ожидается 'object_identifier', найдено '18342' (целое число)

Ofc Я мог бы использовать цитатуотметки, но я не хочу.Можно ли использовать целое число в качестве имени или я использую строку и добавляю id / 1 в протокол?

1 Ответ

0 голосов
/ 19 декабря 2018

Действительно (в настоящее время) невозможно использовать целое число в качестве идентификатора объекта.Одна альтернатива - использовать атом, например '133' вместо 123.Не используйте строку, например "123", поскольку фактическое значение текста в двойных кавычках зависит от double_quotes стандартного флага Prolog, единственным переносимым значением которого является codes (то есть "123" анализируется как [49,50,51].

Переносимый способ преобразования целого числа в атом состоит в использовании стандартных предикатов number_codes/2 и atom_codes/2 (или number_chars/2 и atom_chars/2). Некоторые поддерживаемые внутренние системы Prolog также предоставляют проприетарные встроенныев предикатах для прямого преобразования между числами и атомами.

...