2014-06-12 2 views
2

기본적으로 GNU Prolog는 32 비트 x86 Linux에서 28 비트 정수를 사용합니다.GNU Prolog에서 "long int"를 사용하는 방법은 무엇입니까?

아래의 코드는 컴파일 할 수 없습니다

  1. 방법 GNU 프롤로그에서 32bit 정수를 표현하기 위해 (을 0xdeadbeef 같은) :

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

    은 그럼 아래에 두 개의 전형적인 상황을 혼란 스러워요? 64 비트 정수를 표현하는 방법은 무엇입니까? 64 비트 x86 Linux에서 C의 long long 유형은 64 비트입니다.

  2. C는 manual에 정의 된 인터페이스를 호출하는 GNU 프롤로그를 사용하는 경우가 integer, positive 등 .. 그때 나는 유형을 선택해야합니다, C에 프롤로그에서 32bit 정수를 전달하려면 ..? 애드혹 솔루션을 발견하여이를 question에 작성하면 더 좋은 해결책이 있습니까?

아무도 도와 줄 수 없습니까?

답변

2

GNU Prolog는 경계가 아키텍처 (32/64 비트)에 의존하는 바운드 정수를 사용합니다. 당신은 (64 비트)에 이러한 한계를 알 수 있습니다 :

| ?- current_prolog_flag(min_integer,X). 

X = -1152921504606846976 

yes 
| ?- current_prolog_flag(max_integer,X). 

X = 1152921504606846975 

해결 방법

더 큰 정수를 저장하는 것은 두 부분으로하고 인스턴스를 기록하는 프롤로그 구조를 사용하기 위해 침을하는 것입니다.