--- Terrence Brannon <[EMAIL PROTECTED]> wrote:
> > is basically an intro to logic programming.  In this, I 
> > happen to mention Terrence's AI::Proplog as only allowing 
> > boolean queries.  Please let me know if I'm wrong.
> > 
> 
> You might mention the Perl interface to CLIPS:
> 
>       http://www.ghg.net/clips/CLIPS-FAQ
> 
> Which I found much more useable than Prolog.

I had not heard about this (or I don't remember it if I did.)  However
from http://sourceforge.net/projects/cape/, it appears to be a dead
beta project that's not on the CPAN.  Is there more that I am not
seeing?
 
> Also, Artrijus Tang developed an interface to PLT Scheme
>       
>       http://cpan.uwinnipeg.ca/dist/Inline-MzScheme
> 
>       which gives us access to Dorai Sitaram's Schelog:
> 
>               http://www.ccs.neu.edu/home/dorai/schelog/schelog.html  

Ooh, that's looks very interesting.  I'm going to have to check that
out.

> What software design goals will be reached when you complete this
> project? How will they overlap/compliment the already powerful work
> done in FSA::Rules?

First, I'm glad you like FSA::Rules.  David and I put a lot of work
into that.  Thanks for the nice words.

The intent is to easily bring logic programming to Perl.  Eventually, I
want people to be able to write this:

  # What this is doing is explained in 
  # http://www.perlmonks.org/?node_id=424075
  use AI::Logic 
    functors => [qw/append/],
    vars     => [qw/W X Y Z/],
    import   => 1; # imports builtins like HEAD(X)

  my $logic = AI::Logic->new;
  $logic->assert(
    append([], X, X),
    append([HEAD(W),X],Y,[HEAD(W),Z])
      ->IF(append(X,Y,Z))
  );
  $logic->query(append(X,Y,[qw/a b c d/]));
  while (my $results = $logic->next) {
    my $x = $results->X;
    my $y = $results->Y;
    print "X is [EMAIL PROTECTED]  Y is [EMAIL PROTECTED]";
  }

Which would print something like:

  X is [].  Y is [a,b,c,d].
  X is [a].  Y is [b,c,d].
  X is [a,b].  Y is [c,d].
  X is [a,b,c].  Y is [d].
  X is [a,b,c,d].  Y is [].

Currently, this is not easy to do in Perl, but the AI::Prolog module
does have the core of the algorithm there and can generate those
results (though not in that format or with that syntax.)

As for how it's different from FSA::Rules, well, FSA::Rules is a state
machine.  While I find it rather easy to use (for a state machine), it
didn't seem to map well to the problem state (hah!) at hand.  Of
course, if I could figure out a decent way of building a known set of
transitions via states, I could do it with that, but I haven't yet.  If
you can figure it out, I'd love to steal -- ahem -- see your code :)

I'll also take a look at Schelog.  If Autrijus' work is solid enough
and looks like it will be supported, that could be a nice route to go. 
It would also be a lot faster than what I have.  Currently (with no
optimizations), it appears to be running about 1000 LIPS (Logical
Inferences Per Second.)  That's very slow.

Cheers,
Ovid

=====
If this message is a response to a question on a mailing list, please send
follow up questions to the list.

Web Programming with Perl -- http://users.easystreet.com/ovid/cgi_course/

_______________________________________________
sw-design mailing list
[email protected]
http://metaperl.com/cgi-bin/mailman/listinfo/sw-design

Reply via email to