在SWI-Prolog中,有没有一种简单的方法可以使用REPL将数字从一个基数转换为另一个基数?

时间:2019-01-21 20:22:58

标签: prolog swi-prolog

在使用REPL的SWI-Prolog中,例如,可以轻松地从任意基数转换为基数10。

<div class="main">
	In the middle of a paragraph
	<div class="two-lines">INLINE-BLOCK, WHICH CONTAINS TWO EQUALLY LONG LINES.</div>, 
	with text preceding and following it.
	
	Some more text, and here comes a
	<div class="two-lines">SHORT ONE</div>!
	You see? Two lines!
</div>

但是这失败了。 (没想到它会起作用,但是会显示我的想法。)

?- X = 16'FF.
X = 255.

?- X = 2'11111111.
X = 255.

2 个答案:

答案 0 :(得分:2)

在SWI-Prolog中,您可以在format/2中将r用于基数

以基数数字参数表示法打印整数。因此〜16r将其参数打印为十六进制。参数应在[2,...,36]范围内。小写字母用于9以上的数字。冒号修饰符可用于形成区域设置特定的数字组。

示例:

?- format("~2r", 0xFF).
11111111
true.

答案 1 :(得分:1)

这是发布为答案的评论,因为它需要注释无法执行的格式。

如果您有兴趣捕获输出以表示要在程序中使用的原子,字符串,字符或字符代码,则可以使用 format / n 的其他变体。参见:format/3

?- format(atom(Hex),"~2r",0xFF).
Hex = '11111111'.

?- format(string(Hex),"~2r",0xFF).
Hex = "11111111".

?- format(chars(Hex),"~2r",0xFF).
Hex = ['1', '1', '1', '1', '1', '1', '1', '1'].

?- format(codes(Hex),"~2r",0xFF).
Hex = [49, 49, 49, 49, 49, 49, 49, 49].