在Logtalk中作为object_identifier的整数

时间:2018-12-19 07:48:39

标签: object integer identifier logtalk

我有一个协议生:

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

现在,我想创建一个名称为ID(整数)的对象,但是当我尝试使用create_object(18342, [implements(student)], [], [name(john), surname(smith), studies(it), marks(ok)]).

swilgt给mi错误:

  

错误:类型错误:预期为'object_identifier',发现为'18342'(整数)

Ofc我可以使用引号,但我不想这样做。 是否可以使用整数作为名称,或者我使用字符串并将id / 1添加到协议中?

1 个答案:

答案 0 :(得分:1)

(当前)确实不能将整数用作对象标识符。实际上,一种替代方法是使用原子,例如原子。 '133',而不是123。不要使用字符串,例如"123"是带双引号的文本的实际含义取决于double_quotes标准Prolog标志,其唯一的可移植值是codes(即"123"被解析为[49,50,51]

在整数和原子之间转换的一种便携式方法是使用标准谓词number_codes/2atom_codes/2(或number_chars/2atom_chars/2)。一些受支持的后端Prolog系统还提供专有的内置谓词,以直接在数字和原子之间进行转换。