I've decided to pick up logic programming (again, technically, but I don't really consider six weeks of Prolog 20 years ago valid experience) and selected Mercury as my tool of choice.  What I've seen so far is very impressive, but I have two problems I can't work out.<div>
<br></div><div>The first problem is the alternate back ends.  I can't get any of them to work.  Let's take, for example, this source code (from the incomplete but still very useful tutorial):</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><div><font class="Apple-style-span" face="'courier new', monospace">:- module hello.</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div></div><div>
<div><font class="Apple-style-span" face="'courier new', monospace">:- interface.</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div></div><div><div>
<font class="Apple-style-span" face="'courier new', monospace">:- import_module io.</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div></div><div><div>
<font class="Apple-style-span" face="'courier new', monospace">:- pred main(io::di, io::uo) is det.</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">:- implementation.</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">main(IOState_in, IOState_out) :-</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">    io.write_string("Hello, World!\n", IOState_in, IOState_out).</font></div>
</div></blockquote><div><br></div><div>If I issue <b>mmc --make hello</b>, I get the behaviour I expect.  In a subdirectory called "Mercury" I get a tree full of files including generated C files, object files, a bewildering variety of interim files, etc.  If, however, I instead issue <b>mmc --erlang --make hello</b>, I get this:</div>
<div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><font class="Apple-style-span" face="'courier new', monospace">$ mmc --erlang --make hello</font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">Making Mercury/int3s/hello.int3</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">Making Mercury/ints/<a href="http://hello.int">hello.int</a></font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">Making Mercury/erls/hello.erl</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">** Error: file `Mercury/hrls/mercury__array.hrl' not found: file `mercury__array.hrl' not found</font></div>
</div></blockquote><div><div><br></div><div>Sure enough, if I look in <i>Mercury/hrls</i> there are no files at all.  It's an empty directory.  If I retry this with <b>mmc --java --make hello</b>, I instead get:</div>
<div><br></div></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><div><font class="Apple-style-span" face="'courier new', monospace">$ mmc --java --make hello</font></div>
</div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">Making Mercury/int3s/hello.int3</font></div></div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">Making Mercury/ints/<a href="http://hello.int">hello.int</a></font></div>
</div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">Making Mercury/javas/jmercury/hello.java</font></div></div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">Making Java class files</font></div>
</div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">Mercury/javas/jmercury/hello.java:45: package jmercury.runtime does not exist</font></div></div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">    jmercury.runtime.JavaInternal.progname = "hello";</font></div>
</div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">                    ^</font></div></div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">Mercury/javas/jmercury/hello.java:46: package jmercury.runtime does not exist</font></div>
</div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">    jmercury.runtime.JavaInternal.args = args;</font></div></div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">                    ^</font></div>
</div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">Mercury/javas/jmercury/hello.java:47: package jmercury.runtime does not exist</font></div></div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">    jmercury.runtime.JavaInternal.exit_status = 0;</font></div>
</div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">                    ^</font></div></div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">Mercury/javas/jmercury/hello.java:48: cannot find symbol</font></div>
</div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">symbol  : variable benchmarking</font></div></div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">location: class jmercury.hello</font></div>
</div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">    benchmarking.ML_initialise();</font></div></div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">    ^</font></div>
</div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">Mercury/javas/jmercury/hello.java:51: package jmercury.runtime does not exist</font></div></div></div><div><div><div><font class="Apple-style-span" face="'courier new', monospace">... error log truncated, see `hello.err' for the complete log.</font></div>
</div></div></blockquote><div><div><br></div><div>Now I'm sure that I'm missing the blindingly obvious here, but I can't find any actual instructions for building things with anything but the default back-end.  The user's guide gives command line switches but doesn't talk about, for instance, how to bring in the Mercury Java runtime files, nor where to find the Erlang headers (and library), etc.  There are no .hrl files in the mercury installation directory nor are there any .jar or .class files.  I'm pretty much at a loss over where to go from here.</div>
<div><br></div><div>The second problem is less of one, but it's one I'd like to get solved at some point.  I'm trying to run Mercury from a USB stick so I can carry it with me and play with it in spare moments on whatever computer happens to be handy.  The USB stick is not always on the same drive letter, of course, so hard-coded paths are bad.  I've replaced hard-coded paths in all of the .bat files to use an environment variable (that I set) instead.  This has not worked.  In the process of trying to find the fast_asm.gc libraries the compiler chokes because it's looking for them on a specific drive letter.  I can't figure out where it's getting this path information from, however, so I can't actually change it like I did the .bat files.  Could someone knowledgeable of the Windows installation setup give me a clue on what I need to change to make Mercury USB stick-ready?</div>
<div><br></div>-- <br>"Perhaps people don't believe this, but throughout all of the discussions of entering China our focus has really been what's best for the Chinese people. It's not been about our revenue or profit or whatnot."<br>
--Sergey Brin, demonstrating the emptiness of the "don't be evil" mantra.<br>
</div>