<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">I actually did try that way but I didn’t like it, I wanted something that more accurately —read— as it was to be if that makes sense… also I guess it was influnced by the fact it’s being ported from SWI| Prolog code I wrote before I realised Mercury was The Way.<div class=""> </div><div class="">The actual SWI code is this, and I wanted it to be as visually close as possible henc eusing pair() worked for me but I wondered if there was an alternative.</div><div class=""><br class=""></div><div class="">Thanks Fabrice.</div><div class="">Sean</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">type_dict(<br class="">    _{ names:<br class="">       _{<br class="">           main: "i", % TODO: invert: i: [main, argc] ?!?!?<br class="">           argc: "i",<br class="">           argv: "ppc"<br class="">           %i: [i,j,k,n,x,y,z],<br class="">           % c: [c, chr] %TODO: SHOULD I DO THIS???<br class="">           % TODO: Provide a means to UNDO some defaults eg specify<br class="">           % an empty replacement as a signal to remove key<br class="">       },<br class="">       types:<br class="">       _{<br class="">           v:    "void",<br class="">           pv:   "void*",<br class=""><br class="">           c:    "char",<br class="">           sc:   "signed char",<br class="">           uc:   "unsigned char",<br class="">           pc:   "char*",<br class="">           ppc:  "char**",<br class="">           cpc:  "const char*",<br class="">           cppc:  "const char**",<br class=""><br class="">           sh:   "short",<br class="">           shi:  "short int",<br class="">           ssh:  "signed short",<br class="">           sshi: "signed short int",<br class=""><br class="">           us:   "unsigned short",<br class="">           ushi: "unsigned short int",<br class=""><br class="">           i:    "int",<br class="">           s:    "signed",<br class="">           si:   "signed int",<br class=""><br class="">           u:    "unsigned",<br class="">           ui:   "unsigned int",<br class=""><br class="">           l:    "long",<br class="">           li:   "long int",<br class="">           sl:   "signed long",<br class="">           sli:  "signed long int",<br class=""><br class="">           ul:   "unsigned long",<br class="">           uli:  "unsigned long int",<br class=""><br class="">           ll:   "long long",<br class="">           lli:  "long long int",<br class="">           sll:  "signed long long",<br class="">           slli: "signed long long int",<br class=""><br class="">           ull:  "unsigned long long",<br class="">           ulli: "unsigned longlong int",<br class=""><br class="">           f:    "float",<br class="">           d:    "double",<br class="">           ld:   "long double",<br class=""><br class="">           b:    "_Bool", % TODO: "auto-include" stdbool.h ?!?!?<br class="">           '?':  "_Bool",<br class=""><br class="">           % some extra ones that I find I use all the time<br class=""><br class="">           fi:  "FILE",<br class="">           pfi: "FILE*"<br class="">       },<br class="">       defaults:<br class="">       _{<br class="">           variable: "i",<br class="">           function: "v"<br class="">       },<br class="">       %% maps supported types to printf() format specifier for EMIT<br class="">       printf:<br class="">       _{<br class="">           'void*': "%p",<br class="">           'char': "%c",<br class="">           'signed char': "%c",<br class="">           'unsigned char': "%uc",<br class="">           'char*': "%s",<br class="">           'char**': "%p",<br class="">           'const char*': "%s",<br class="">           'const char**': "%p",<br class="">           'short': "%i",<br class="">           'short int': "%i",<br class="">           'signed short': "%i",<br class="">           'signed short int': "%ui",<br class="">           'unsigned short': "%ui",<br class="">           'unsigned short int': "%ui",<br class="">           'int': "%i",<br class="">           'signed': "%i",<br class="">           'signed int': "%i",<br class="">           'unsigned': "%ui",<br class="">           'unsigned int': "%ui",<br class="">           'long': "%li",<br class="">           'long int': "%li",<br class="">           'signed long': "%li",<br class="">           'signed long int': "%li",<br class="">           'unsigned long': "%ul",<br class="">           'unsigned long int': "%ul",<br class="">           'long long': "%lli",<br class="">           'long long int': "%lli",<br class="">           'signed long long': "%lli",<br class="">           'signed long long int': "%lli",<br class="">           'unsigned long long': "%llu",<br class="">           'unsigned long long int': "%llu",<br class="">           'float': "%g",<br class="">           'double': "%g",<br class="">           'long double': "%Lg",<br class="">           '_Bool': "%i",<br class="">           'FILE*': "%p"<br class="">           }<br class="">     }<br class="">).<br class=""><br class=""><br class=""><br class=""><br class=""><br class=""></div><div class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 25 Jan 2022, at 00:27, Fabrice Nicol <<a href="mailto:fabrnicol@gmail.com" class="">fabrnicol@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">
  
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" class="">
  
  <div class=""><p class="">Below is an alternative, which has pros and cons. <br class="">
    </p><p class="">A bit more concise, but you have to align the data carefully to
      avoid input errors.</p><p class="">Or, if you have lots of data, you can write a database in a file,
      and parse (use the GH csv library for example).<br class="">
    </p><p class="">%%<br class="">
    </p><p class="">:-module map_test.<br class="">
      :-interface.<br class="">
      :-import_module io.<br class="">
      :-import_module map.<br class="">
      :-import_module string.<br class="">
      :-pred create_maps(map(string, string), map(string, string)).<br class="">
      :-mode create_maps(out, out) is det.<br class="">
      <br class="">
      :-pred main(io::di, io::uo) is det.<br class="">
      <br class="">
      :-implementation.<br class="">
    </p><p class="">:-import_module list.<br class="">
      <br class="">
      %% create<br class="">
      <br class="">
      create_maps(Types, Vars) :-<br class="">
          K1 = ["i",       "psz",         "    v",            "pv",<br class="">
                   "c",       "sc",               "uc",           "pc",<br class="">
                   "ppc",    "cpc",             "cppc"],<br class="">
          V1 = ["int",     "char*",           "void",       "void*",<br class="">
                  "char",   "signed char", "unsigned char", "char*",<br class="">
                  "char**", "const char*", "const char**"],<br class="">
          K2 = ["argc",   "argv"],<br class="">
          V2 = ["int",    "ppc"],<br class="">
          det_insert_from_corresponding_lists(K1, V1, map.init, Types),<br class="">
          det_insert_from_corresponding_lists(K2, V2, map.init, Vars).<br class="">
      <br class="">
      %% test<br class="">
      <br class="">
      main(!IO) :- create_maps(Types, Vars),<br class="">
          write_string(Types^det_elem("cpc"), !IO),<br class="">
          nl(!IO),<br class="">
          write_string(Vars^det_elem("argc"), !IO),<br class="">
          nl(!IO).</p><p class="">:-end_module<br class="">
    </p><p class="">%%</p><p class="">$ ./map_test</p><p class="">const char*<br class="">
      int</p><p class="">%%<br class="">
    </p><p class="">Fabrice</p><p class=""><br class="">
    </p>
    <blockquote type="cite" cite="mid:0A280606-7937-41AA-B4BB-9B2540322678@gmail.com" class="">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" class="">
      Is there a more concise way of creating a map full of static data?
      The best I have obtained is this:
      <div class=""><br class="">
      </div>
      <div class=""><font class="" face="Courier New">default_typemap =
          Out :-<br class="">
              map.from_assoc_list([<br class="">
                  ("i"    - "int"),<br class="">
                  ("psz"  - "char*"),<br class="">
                  ("v"    - "void"),<br class="">
                  ("pv"   - "void*"),<br class="">
                  ("c"    - "char"),<br class="">
                  ("sc"   - "signed char"),<br class="">
                  ("uc"   - "unsigned char"),<br class="">
                  ("pc"   - "char*"),<br class="">
                  ("ppc"  - "char**"),<br class="">
                  ("cpc"  - "const char*"),<br class="">
                  ("cppc" - "const char**")<br class="">
              ],<br class="">
              Types),<br class="">
              map.from_assoc_list([<br class="">
                  ("argc" - "int"),<br class="">
                  ("argv" - "ppc")<br class="">
              ],<br class="">
              Vars),</font></div>
      <div class=""><font class="" face="Courier New">:</font></div>
      <div class=""><font class="" face="Courier New">: .. more code..</font></div>
      <div class=""><font class="" face="Courier New">:</font></div>
      <div class=""><br class="">
      </div>
      <div class="">Each backend coder that is a for typed language will
        be providing an initial lookup of both variables and types so it
        can infer necessary typing at code render time.</div>
      <div class=""><br class="">
      </div>
      <div class="">Thanks,</div>
      <div class="">Sean</div>
      <div class=""><br class="">
      </div>
      <br class="">
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:users@lists.mercurylang.org">users@lists.mercurylang.org</a>
<a class="moz-txt-link-freetext" href="https://lists.mercurylang.org/listinfo/users">https://lists.mercurylang.org/listinfo/users</a>
</pre>
    </blockquote>
  </div>

</div></blockquote></div><br class=""></div></body></html>