当前位置: 首页 > 知识库问答 >
问题:

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

羊舌庆
2023-03-14

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

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

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

如何创建一个整数作为字符代码常量,它将使用整数/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/IEC 13211-1第一版1995-06-01信息技术-程序设计语言- Prolog第1部分:一般核心

国际标准ISO/IEC 13211-1:1995
技术勘误表1
2007年11月15日发布

国际标准ISO/IEC 13211-1:1995技术勘误表2,发布于2012年2月15日

< code >整数的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 *) 

我怀疑国际标准化组织/国际电工委员会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) . 

共有1个答案

王才
2023-03-14

这在评论中被假回答。
在这里转发,以便其他人可以看到答案的存在。

integer(0'0).
true.

integer(0'9).
true.

integer(0'a).
true.

integer(0'\n).
true.
 类似资料:
  • 我目前正在python中使用Google Vision API检测图像中的汉字,但我发现Google将返回python源代码(如\XE7\X80\X86\XE7\XAB\X91),而不是一些人类可读字符串。 我如何将它转换成utf-8格式的人类可读文本? Requests.Exceptions.ConnectionError除外:打印(“Request Error”) 谢谢你

  • 我试图从标准输入中读取一些非常大的数字,并将它们相加。 然而,要添加到BigInteger,我需要使用

  • 问题内容: 这应该很简单: 这将导致错误: 0 strconv.ParseInt:解析“ 1250000.0000”:无效的语法 有什么线索吗? 问题答案: 仅适用于可解析为整数的字符串。 您需要的是parseFloat

  • 问题内容: 我对Java和Android都缺乏经验。我正在尝试检索存储在android手机模拟器的联系人之一中的电话号码。当我成功获取它时,该数字已以字符串形式返回,格式为“(987)654-3210”。我想将其转换为整数或长整数。我怎样才能做到这一点?如果使用,它将返回一个。尝试使用时也失败。那我该怎么办?我想要没有任何大括号或连字符的“ 9876543210”。 问题答案: 使用储存号码会更好

  • 问题内容: 例如输入:(类型:) 转换示例:(类型:的切片) 问题答案: 除了mhutter的答案外,还请注意您的输入看起来像一个JSON数组(也许是来自JSON文本?)。 如果您这样处理,则可以将其内容编组为一个切片。直接解析其中的数字并不会更快(因为该包使用了反射),但是它肯定更简单: 输出(在Go Playground上尝试):

  • 我正在使用协议缓冲区和smack制作程序。 smack(xmpp)只能传输字符串类型的数据。并且协议缓冲器可以产生字节阵列数据。所以,我这样做 使用协议缓冲区制作byte[]数据。 使用base64将byte[]数据编码为字符串 使用smack传输 将接收到的字符串(使用base64编码)解码为字符串 将解码字符串更改为byte[] 使用协议缓冲区从byte[]解析数据。 那么没有< code>I