1

我有一个协议学生:

:- 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)]).

swilt 给 mi 错误:

错误:类型错误:预期为“object_identifier”,找到“18342”(整数)

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

4

1 回答 1

1

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

在整数和原子之间进行转换的一种可移植方式是使用标准谓词number_codes/2and atom_codes/2(or number_chars/2and atom_chars/2)。一些支持的后端 Prolog 系统还提供专有的内置谓词来直接在数字和原子之间进行转换。

于 2018-12-19T18:15:42.203 回答