prolog - 如何将整数创建为字符代码常量?

标签 prolog iso-prolog

我正在使用 SWI-Prolog 为 integer/1 构建一些测试用例。

ISO/IEC 13211-1 给出了整数 的 BNF 定义,而整数的替代方案之一是字符代码常量

我能够使用integer/1创建和测试所有其他替代方案的示例,但对于字符代码常量我无法创建有效的示例。 (见下文)

如何使用 integer/1 创建一个作为字符代码常量返回 true 的整数?

<小时/>

回答

感谢@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.

并感谢 j4n bur53 通过 @false 的链接

对于 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 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 *) ;

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 是错误的,但检查勘误表显示没有更正。

<小时/>

整数测试用例

% <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) . 

最佳答案

评论中对此问题的回答为 false。
在这里重新发布,以便其他人可以看到答案的存在。

integer(0'0).
true.

integer(0'9).
true.

integer(0'a).
true.

integer(0'\n).
true.

关于prolog - 如何将整数创建为字符代码常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41637402/

相关文章:

prolog - 如何从字符串创建匿名变量?

algorithm - 如何 - Prolog 中的图形着色

prolog - Prolog 中的复合 boolean 表达式

prolog - 使用削减来提高效率

prolog - 如何处理序言列表?

variables - 以编程方式写入和读取术语时是否可以保留变量名称?

Prolog 运算符优先级

list - 无限的列表是否合理?

prolog - 复杂抽象语法树的词序

prolog - swi-prolog 和 yap 的不同结果