1:- module(tidylog_number_hex, [hex//1]).    2
    3% Parse Prolog hexadecimal number (never used for generating)
    4
    5hex(Neg) -->
    6    "-",
    7    hex_(N),
    8    { Neg is -N }.
    9hex(N) -->
   10    hex_(N).
   11
   12hex_(N) -->
   13    "0x",
   14    digit(Code),
   15    digits(Codes),
   16    { name(N,[0'0, 0'x, Code|Codes]) }.
   17
   18
   19digit(C) -->
   20    [C],
   21    { between(0'0,0'9,C)
   22    ; between(0'a,0'f,C)
   23    ; between(0'A,0'F,C)
   24    }.
   25
   26
   27digits([0'_,Code|Codes]) -->
   28    [0'_],
   29    digit(Code),
   30    digits(Codes).
   31digits([Code|Codes]) -->
   32    digit(Code),
   33    digits(Codes).
   34digits([]) -->
   35    []