1:- module(phex, []).    2
    3:- multifile(pcompare/4).    4:- multifile(ptype/2).    5
    6purity:pcompare(hex, hex(A), hex(B), C) :-
    7    hex_map(A, B, C).
    8
    9purity:pcompare(hex2, hex2(A1,B1), hex2(A2,B2), C) :-
   10    hex_map(A1, A2, Ch1),
   11    hex2_cmp(Ch1, B1, B2, C).
   12
   13hex2_cmp(=, B1, B2, C) :- 
   14    hex_map(B1, B2, C).
   15hex2_cmp(>, _, _, >).
   16hex2_cmp(<, _, _, <).
   17
   18purity:ptype(hex(H), hex) :-
   19    hex(H).
   20purity:ptype(hex2(H1,H2), hex2) :-
   21    hex(H1),
   22    hex(H2).
   23
   24% hex(HexValue).
   25hex(0).
   26hex(1).
   27hex(2).
   28hex(3).
   29hex(4).
   30hex(5).
   31hex(6).
   32hex(7).
   33hex(8).
   34hex(9).
   35hex(a).
   36hex(b).
   37hex(c).
   38hex(d).
   39hex(e).
   40hex(f).
   41
   42% map 0
   43hex_map(0, 0, =).
   44hex_map(0, 1, <).
   45hex_map(0, 2, <).
   46hex_map(0, 3, <).
   47hex_map(0, 4, <).
   48hex_map(0, 5, <).
   49hex_map(0, 6, <).
   50hex_map(0, 7, <).
   51hex_map(0, 8, <).
   52hex_map(0, 9, <).
   53hex_map(0, a, <).
   54hex_map(0, b, <).
   55hex_map(0, c, <).
   56hex_map(0, d, <).
   57hex_map(0, e, <).
   58hex_map(0, f, <).
   59
   60% map 1
   61hex_map(1, 0, >).
   62hex_map(1, 1, =).
   63hex_map(1, 2, <).
   64hex_map(1, 3, <).
   65hex_map(1, 4, <).
   66hex_map(1, 5, <).
   67hex_map(1, 6, <).
   68hex_map(1, 7, <).
   69hex_map(1, 8, <).
   70hex_map(1, 9, <).
   71hex_map(1, a, <).
   72hex_map(1, b, <).
   73hex_map(1, c, <).
   74hex_map(1, d, <).
   75hex_map(1, e, <).
   76hex_map(1, f, <).
   77
   78% map 2
   79hex_map(2, 0, >).
   80hex_map(2, 1, >).
   81hex_map(2, 2, =).
   82hex_map(2, 3, <).
   83hex_map(2, 4, <).
   84hex_map(2, 5, <).
   85hex_map(2, 6, <).
   86hex_map(2, 7, <).
   87hex_map(2, 8, <).
   88hex_map(2, 9, <).
   89hex_map(2, a, <).
   90hex_map(2, b, <).
   91hex_map(2, c, <).
   92hex_map(2, d, <).
   93hex_map(2, e, <).
   94hex_map(2, f, <).
   95
   96% map 3
   97hex_map(3, 0, >).
   98hex_map(3, 1, >).
   99hex_map(3, 2, >).
  100hex_map(3, 3, =).
  101hex_map(3, 4, <).
  102hex_map(3, 5, <).
  103hex_map(3, 6, <).
  104hex_map(3, 7, <).
  105hex_map(3, 8, <).
  106hex_map(3, 9, <).
  107hex_map(3, a, <).
  108hex_map(3, b, <).
  109hex_map(3, c, <).
  110hex_map(3, d, <).
  111hex_map(3, e, <).
  112hex_map(3, f, <).
  113
  114% map 4
  115hex_map(4, 0, >).
  116hex_map(4, 1, >).
  117hex_map(4, 2, >).
  118hex_map(4, 3, >).
  119hex_map(4, 4, =).
  120hex_map(4, 5, <).
  121hex_map(4, 6, <).
  122hex_map(4, 7, <).
  123hex_map(4, 8, <).
  124hex_map(4, 9, <).
  125hex_map(4, a, <).
  126hex_map(4, b, <).
  127hex_map(4, c, <).
  128hex_map(4, d, <).
  129hex_map(4, e, <).
  130hex_map(4, f, <).
  131
  132% map 5
  133hex_map(5, 0, >).
  134hex_map(5, 1, >).
  135hex_map(5, 2, >).
  136hex_map(5, 3, >).
  137hex_map(5, 4, >).
  138hex_map(5, 5, =).
  139hex_map(5, 6, <).
  140hex_map(5, 7, <).
  141hex_map(5, 8, <).
  142hex_map(5, 9, <).
  143hex_map(5, a, <).
  144hex_map(5, b, <).
  145hex_map(5, c, <).
  146hex_map(5, d, <).
  147hex_map(5, e, <).
  148hex_map(5, f, <).
  149
  150% map 6
  151hex_map(6, 0, >).
  152hex_map(6, 1, >).
  153hex_map(6, 2, >).
  154hex_map(6, 3, >).
  155hex_map(6, 4, >).
  156hex_map(6, 5, >).
  157hex_map(6, 6, =).
  158hex_map(6, 7, <).
  159hex_map(6, 8, <).
  160hex_map(6, 9, <).
  161hex_map(6, a, <).
  162hex_map(6, b, <).
  163hex_map(6, c, <).
  164hex_map(6, d, <).
  165hex_map(6, e, <).
  166hex_map(6, f, <).
  167
  168% map 7
  169hex_map(7, 0, >).
  170hex_map(7, 1, >).
  171hex_map(7, 2, >).
  172hex_map(7, 3, >).
  173hex_map(7, 4, >).
  174hex_map(7, 5, >).
  175hex_map(7, 6, >).
  176hex_map(7, 7, =).
  177hex_map(7, 8, <).
  178hex_map(7, 9, <).
  179hex_map(7, a, <).
  180hex_map(7, b, <).
  181hex_map(7, c, <).
  182hex_map(7, d, <).
  183hex_map(7, e, <).
  184hex_map(7, f, <).
  185
  186% map 8
  187hex_map(8, 0, >).
  188hex_map(8, 1, >).
  189hex_map(8, 2, >).
  190hex_map(8, 3, >).
  191hex_map(8, 4, >).
  192hex_map(8, 5, >).
  193hex_map(8, 6, >).
  194hex_map(8, 7, >).
  195hex_map(8, 8, =).
  196hex_map(8, 9, <).
  197hex_map(8, a, <).
  198hex_map(8, b, <).
  199hex_map(8, c, <).
  200hex_map(8, d, <).
  201hex_map(8, e, <).
  202hex_map(8, f, <).
  203
  204% map 9
  205hex_map(9, 0, >).
  206hex_map(9, 1, >).
  207hex_map(9, 2, >).
  208hex_map(9, 3, >).
  209hex_map(9, 4, >).
  210hex_map(9, 5, >).
  211hex_map(9, 6, >).
  212hex_map(9, 7, >).
  213hex_map(9, 8, >).
  214hex_map(9, 9, =).
  215hex_map(9, a, <).
  216hex_map(9, b, <).
  217hex_map(9, c, <).
  218hex_map(9, d, <).
  219hex_map(9, e, <).
  220hex_map(9, f, <).
  221
  222% map a
  223hex_map(a, 0, >).
  224hex_map(a, 1, >).
  225hex_map(a, 2, >).
  226hex_map(a, 3, >).
  227hex_map(a, 4, >).
  228hex_map(a, 5, >).
  229hex_map(a, 6, >).
  230hex_map(a, 7, >).
  231hex_map(a, 8, >).
  232hex_map(a, 9, >).
  233hex_map(a, a, =).
  234hex_map(a, b, >).
  235hex_map(a, c, <).
  236hex_map(a, d, <).
  237hex_map(a, e, <).
  238hex_map(a, f, <).
  239
  240% map b
  241hex_map(b, 0, >).
  242hex_map(b, 1, >).
  243hex_map(b, 2, >).
  244hex_map(b, 3, >).
  245hex_map(b, 4, >).
  246hex_map(b, 5, >).
  247hex_map(b, 6, >).
  248hex_map(b, 7, >).
  249hex_map(b, 8, >).
  250hex_map(b, 9, >).
  251hex_map(b, a, >).
  252hex_map(b, b, =).
  253hex_map(b, c, <).
  254hex_map(b, d, <).
  255hex_map(b, e, <).
  256hex_map(b, f, <).
  257
  258% map c
  259hex_map(c, 0, >).
  260hex_map(c, 1, >).
  261hex_map(c, 2, >).
  262hex_map(c, 3, >).
  263hex_map(c, 4, >).
  264hex_map(c, 5, >).
  265hex_map(c, 6, >).
  266hex_map(c, 7, >).
  267hex_map(c, 8, >).
  268hex_map(c, 9, >).
  269hex_map(c, a, >).
  270hex_map(c, b, >).
  271hex_map(c, c, =).
  272hex_map(c, d, <).
  273hex_map(c, e, <).
  274hex_map(c, f, <).
  275
  276% map d
  277hex_map(d, 0, >).
  278hex_map(d, 1, >).
  279hex_map(d, 2, >).
  280hex_map(d, 3, >).
  281hex_map(d, 4, >).
  282hex_map(d, 5, >).
  283hex_map(d, 6, >).
  284hex_map(d, 7, >).
  285hex_map(d, 8, >).
  286hex_map(d, 9, >).
  287hex_map(d, a, >).
  288hex_map(d, b, >).
  289hex_map(d, c, >).
  290hex_map(d, d, =).
  291hex_map(d, e, <).
  292hex_map(d, f, <).
  293
  294% map e
  295hex_map(e, 0, >).
  296hex_map(e, 1, >).
  297hex_map(e, 2, >).
  298hex_map(e, 3, >).
  299hex_map(e, 4, >).
  300hex_map(e, 5, >).
  301hex_map(e, 6, >).
  302hex_map(e, 7, >).
  303hex_map(e, 8, >).
  304hex_map(e, 9, >).
  305hex_map(e, a, >).
  306hex_map(e, b, >).
  307hex_map(e, c, >).
  308hex_map(e, d, >).
  309hex_map(e, e, =).
  310hex_map(e, f, <).
  311
  312% map f
  313hex_map(f, 0, >).
  314hex_map(f, 1, >).
  315hex_map(f, 2, >).
  316hex_map(f, 3, >).
  317hex_map(f, 4, >).
  318hex_map(f, 5, >).
  319hex_map(f, 6, >).
  320hex_map(f, 7, >).
  321hex_map(f, 8, >).
  322hex_map(f, 9, >).
  323hex_map(f, a, >).
  324hex_map(f, b, >).
  325hex_map(f, c, >).
  326hex_map(f, d, >).
  327hex_map(f, e, >).
  328hex_map(f, f, =)