如何将整数创建为字符代码常量?
How is a integer created as a character code constant?
我正在使用 SWI-Prolog 为 integer/1 构建一些测试用例。
ISO/IEC 13211-1 给出了 integer
的 BNF 定义,整数的替代方案之一是 character code constant
。
我能够使用 integer/1
创建和测试所有其他替代方案的示例,但对于 character code constant
我无法创建有效示例。 (见下文)
如何使用 integer/1 创建一个整数作为 character code constant
将 return 为真?
回答
感谢@false。
integer(0'0).
true.
integer(0'9).
true.
integer(0'a).
true.
integer(0'\n).
true.
实用性
X is 0'\n.
X = 10.
X is 0b010101.
X = 21.
X is 0xFFF1.
X = 65521.
X is 0o7423.
X = 3859.
感谢来自@false
的linkj4n bur53
对于 SWI-Prolog,除了 2,8 或 16 之外,还可以使用其他基数。
X is 5'1234012340.
X = 3032220.
X is 32'123456789ABCDEFGHIJKLMNOPQRSTU.
X = 47525417447024678661670292427038339608998846.
我试过的
integer("0").
false.
integer('0').
false.
integer(`0`).
false.
integer("1").
false.
integer('1').
false.
integer(`1`).
false.
ISO
国际标准 ISO/IEC 13211-1 第一版 1995-06-01
信息技术 - 编程语言 - Prolog
第 1 部分:通用核心
国际标准 ISO/IEC 13211-1:1995
技术勘误表 1
发布时间 2007-11-15
国际标准 ISO/IEC 13211-1:1995
技术勘误表 2
发布时间 2012-02-15
BNF integer
integer token (* 6.4.4 *) =
integer constant (* 6.4.4 *)
| character code constant (* 6.4.4 *)
| binary constant (* 6.4.4 *)
| octal constant (* 6.4.4 *)
| hexadecimal constant (* 6.4.4 *) ;
character code constant
的 BNF
character code constant (* 6.4.4 *) =
"0" , single quote char (* 6.5.5 *), single quoted character (* 6.4.2.1 *)
我怀疑 ISO/IEC 13211-1 中的 BNF 是错误的,但检查 CORRIGENDUM 显示没有更正。
整数测试用例
% <integer constant> examples
number(1).
% true.
number(0).
% true.
number(01).
% true.
number(12345678901234567890123456789012345678901234567890).
% true.
% <character code constant> examples
% ???
% <binary constant> examples
number(0b0).
% true.
number(0b10101010101010101010101010101010101010101010101010).
% true.
integer(0b2).
% ERROR: Syntax error: Illegal number
% ERROR: integer
% ERROR: ** here **
% ERROR: (0b2) .
% <octal constant> examples
integer(0o7).
% true.
integer(0o1234567012345670123456701234567012345670123456701234567).
% true.
integer(0o8).
% ERROR: Syntax error: Illegal number
% ERROR: integer
% ERROR: ** here **
% ERROR: (0o8) .
% <hexadecimal constant>
integer(0x0).
% true.
integer(0xF).
% true.
integer(0xf).
% true.
integer(0x123456789ABCDEF012345670123456789ABCDEF012345670123456789ABCDEF).
% true.
integer(0xG).
% ERROR: Syntax error: Illegal number
% ERROR: integer
% ERROR: ** here **
% ERROR: (0xG) .
评论中回答错误。
在这里重新发布,以便其他人可以看到存在的答案。
integer(0'0).
true.
integer(0'9).
true.
integer(0'a).
true.
integer(0'\n).
true.
我正在使用 SWI-Prolog 为 integer/1 构建一些测试用例。
ISO/IEC 13211-1 给出了 integer
的 BNF 定义,整数的替代方案之一是 character code constant
。
我能够使用 integer/1
创建和测试所有其他替代方案的示例,但对于 character code constant
我无法创建有效示例。 (见下文)
如何使用 integer/1 创建一个整数作为 character code constant
将 return 为真?
回答
感谢@false。
integer(0'0).
true.
integer(0'9).
true.
integer(0'a).
true.
integer(0'\n).
true.
实用性
X is 0'\n.
X = 10.
X is 0b010101.
X = 21.
X is 0xFFF1.
X = 65521.
X is 0o7423.
X = 3859.
感谢来自@false
的linkj4n bur53对于 SWI-Prolog,除了 2,8 或 16 之外,还可以使用其他基数。
X is 5'1234012340.
X = 3032220.
X is 32'123456789ABCDEFGHIJKLMNOPQRSTU.
X = 47525417447024678661670292427038339608998846.
我试过的
integer("0").
false.
integer('0').
false.
integer(`0`).
false.
integer("1").
false.
integer('1').
false.
integer(`1`).
false.
ISO
国际标准 ISO/IEC 13211-1 第一版 1995-06-01
信息技术 - 编程语言 - Prolog
第 1 部分:通用核心
国际标准 ISO/IEC 13211-1:1995
技术勘误表 1
发布时间 2007-11-15
国际标准 ISO/IEC 13211-1:1995
技术勘误表 2
发布时间 2012-02-15
BNF integer
integer token (* 6.4.4 *) =
integer constant (* 6.4.4 *)
| character code constant (* 6.4.4 *)
| binary constant (* 6.4.4 *)
| octal constant (* 6.4.4 *)
| hexadecimal constant (* 6.4.4 *) ;
character code constant
character code constant (* 6.4.4 *) =
"0" , single quote char (* 6.5.5 *), single quoted character (* 6.4.2.1 *)
我怀疑 ISO/IEC 13211-1 中的 BNF 是错误的,但检查 CORRIGENDUM 显示没有更正。
整数测试用例
% <integer constant> examples
number(1).
% true.
number(0).
% true.
number(01).
% true.
number(12345678901234567890123456789012345678901234567890).
% true.
% <character code constant> examples
% ???
% <binary constant> examples
number(0b0).
% true.
number(0b10101010101010101010101010101010101010101010101010).
% true.
integer(0b2).
% ERROR: Syntax error: Illegal number
% ERROR: integer
% ERROR: ** here **
% ERROR: (0b2) .
% <octal constant> examples
integer(0o7).
% true.
integer(0o1234567012345670123456701234567012345670123456701234567).
% true.
integer(0o8).
% ERROR: Syntax error: Illegal number
% ERROR: integer
% ERROR: ** here **
% ERROR: (0o8) .
% <hexadecimal constant>
integer(0x0).
% true.
integer(0xF).
% true.
integer(0xf).
% true.
integer(0x123456789ABCDEF012345670123456789ABCDEF012345670123456789ABCDEF).
% true.
integer(0xG).
% ERROR: Syntax error: Illegal number
% ERROR: integer
% ERROR: ** here **
% ERROR: (0xG) .
评论中回答错误。
在这里重新发布,以便其他人可以看到存在的答案。
integer(0'0).
true.
integer(0'9).
true.
integer(0'a).
true.
integer(0'\n).
true.