This
my $code = <<END_CODE;
owns(merlyn,gold).
owns(ovid,books).
owns(kudra,gold).
valuable(perl).
valuable(gold).
valuable(corinna).
query :-
owns(X,Y), valuable(Y),
writef('["%t", "%t"], ',[X,Y]).
main :-
writef('[ '),
bagof(_,query,_),
writef(']\n').
END_CODE
my $tmpfile = "deleteme.pro";
open(TMP,">$tmpfile"); print TMP $code; close(TMP);
my $result = `pl -q -f deleteme.pro -t main`;
unlink($tmpfile);
print $result;
yields this
[ ["merlyn", "gold"], ["kudra", "gold"], ]
using
SWI-Prolog.
Perl is great at generating code, handing it to an industrial-strength backtracking engine, and scraping the result (though there is also
Language::Prolog::Yaswi
et.al.).
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.