如何使用" long int"在GNU Prolog?

时间:2014-06-12 18:35:47

标签: prolog gnu-prolog

所以基本上似乎GNU Prolog在我的32位x86 Linux上使用28位整数。

以下代码无法编译:

foo(A) :-
   A0 is 0xdeadbeef,
   A1 is A0 >> 8,
   A2 is A0 >> 16,
   A3 is A0 >> 24.

然后我对以下两种典型情况感到困惑:

  1. 如何在GNU Prolog中表示32bit整数(如0xdeadbeef)?并进一步推动,如何表示64位整数?在64位x86 Linux上,C中的long long类型具有64位。

  2. 当使用GNU Prolog调用C时,manual中定义的接口有integerpositive和其他..然后如果我想传递{{1从Prolog到C的整数,我应该选择哪种类型..?我找到了一个临时解决方案并将其写入question,是否有更好的解决方案?

  3. 有人能给我一些帮助吗?

1 个答案:

答案 0 :(得分:2)

GNU Prolog使用有界整数,其边界取决于体系结构(32/64位)。您可以通过(在64位上)知道这些限制:

| ?- current_prolog_flag(min_integer,X).

X = -1152921504606846976

yes
| ?- current_prolog_flag(max_integer,X).

X = 1152921504606846975

存储更大整数的解决方法是将它们分成两部分,例如使用Prolog结构来记录它们。