<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace">A dynamic predicate in Prolog is, to a first approximation,</div><div class="gmail_default" style="font-family:monospace,monospace">a set of terms.  Way back in the 80s, I did some experiments,</div><div class="gmail_default" style="font-family:monospace,monospace">and found that several examples that I tried worked faster</div><div class="gmail_default" style="font-family:monospace,monospace">if I represented such a set of terms as a data structure.</div><div class="gmail_default" style="font-family:monospace,monospace">It depended on what exactly the program was doing, and how</div><div class="gmail_default" style="font-family:monospace,monospace">much work I put into indexing the data structure.  But it</div><div class="gmail_default" style="font-family:monospace,monospace">was the rule, not the exception, for a data structure to be</div><div class="gmail_default" style="font-family:monospace,monospace">a better choice than a dynamic predicate, *in Prolog*.</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div style="font-family:monospace,monospace" class="gmail_default">I still remember with somewhat mixed feelings demonstrating</div><div style="font-family:monospace,monospace" class="gmail_default">to a Quintus customer that his program could run 700 times</div><div style="font-family:monospace,monospace" class="gmail_default">faster if he didn't use the dynamic data base.  Good feelings</div><div style="font-family:monospace,monospace" class="gmail_default">because 700 times faster.  Bad feelings because we lost that</div><div style="font-family:monospace,monospace" class="gmail_default">customer.  (:-(<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 18 Jan 2022 at 11:49, Stepp, Nigel D <<a href="mailto:ndstepp@hrl.com">ndstepp@hrl.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello all,<br>
<br>
I am very interested in switching a prolog codebase to mercury, but parts of the codebase follow a pattern like:<br>
<br>
- receive a list of facts<br>
- assert facts<br>
- do inference using static predicates<br>
- retract facts<br>
<br>
I'm well aware that mercury does not support assert/retract, and I read a very old thread that was an interesting discussion (<a href="https://lists.mercurylang.org/archives/users/2006-January/003388.html" rel="noreferrer" target="_blank">https://lists.mercurylang.org/archives/users/2006-January/003388.html</a>).<br>
<br>
The issues in that thread were complicated by dynamic loading of modules, however. I am only interested in the list-of-facts part.<br>
<br>
What is a good way (or I guess any way) of transforming a pattern like the above to something in mercury?<br>
<br>
A tiny example is something like this:<br>
<br>
:- dynamic factA/1.<br>
:- dynamic factB/1.<br>
<br>
p(A,B) :- factA(A), factB(B).<br>
<br>
callP(Facts, ABs) :-<br>
    assertFacts(Facts),<br>
    findall(X, p(X,X), Xs),<br>
    retractFacts(Facts).<br>
<br>
Where assertFacts/1 and retractFacts/1 do the obvious-sounding things. Facts might be something like [factA(x),factB(y),factA(y)], with answer Xs=[y].<br>
<br>
--<br>
Nigel Stepp, Ph.D. Information and System Sciences Lab HRL Laboratories, LLC.<br>
3011 Malibu Canyon Road, Malibu, CA 90265 Office: +1 310-317-5267<br>
<br>
CONFIDENTIALITY NOTICE: The information transmitted in this email, including attachments, is intended only for the person(s) or entity to which it is addressed and may contain confidential, proprietary and/or privileged material exempt from disclosure under applicable law. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this message in error, please contact the sender immediately and destroy any copies of this information in their entirety.<br>
_______________________________________________<br>
users mailing list<br>
<a href="mailto:users@lists.mercurylang.org" target="_blank">users@lists.mercurylang.org</a><br>
<a href="https://lists.mercurylang.org/listinfo/users" rel="noreferrer" target="_blank">https://lists.mercurylang.org/listinfo/users</a><br>
</blockquote></div>