我有个礼仪学生:
:- protocol(student).
:- public([
name/1,
surname/1,
studies/1,
marks/1
]).
:- end_protocol.现在,我想要创建一个名为ID (Integer)的对象,但当我试图使用create_object(18342, [implements(student)], [], [name(john), surname(smith), studies(it), marks(ok)]).进行此操作时
swilgt给出了错误:
错误:输入错误:“object_identifier”预期,找到'18342‘(一个整数)
Ofc我可以用引号,但我不想用。是否有使用整数作为名称的选项,或者是否使用字符串并将id/1添加到协议中?
发布于 2018-12-19 18:15:42
实际上(目前)不可能使用整数作为对象标识符。一种选择确实是使用原子,例如'133'而不是123。不要使用字符串,例如"123",因为双引号的实际含义取决于double_quotes标准Prolog标志,它唯一的可移植值是codes(即"123"被解析为[49,50,51] )。
在整数和原子之间进行转换的一种可移植方式是使用标准谓词number_codes/2和atom_codes/2 (或number_chars/2和atom_chars/2)。一些受支持的后端Prolog系统还提供了专有的内置谓词,可以直接在数字和原子之间进行转换。
https://stackoverflow.com/questions/53846697
复制相似问题