Stuff with the Perl Foundation. A couple of patches in the Perl core. A few CPAN modules. That about sums it up.
After an agonizing amount of time tracking down my last bug, I finally nailed it. Apparently I had no (known) bugs remaining in my Prolog engine. Instead, I had a small typo in my Prolog program. It's going to take a while to get it ready for the CPAN because there's a fair amount of code and it's very complicated, but there will be an AI::Prolog on the CPAN. I was actually thinking about calling it AI::Logic, but the current implementation is pretty tightly tied to Prolog and I'm still dabbling with a different parser that would be more "perlish" (based on the Warren Abstract Machine, if anyone cares.)
In any event, here's one of the sample programs:
#!/usr/local/bin/perl -l
use strict;
use warnings;
use lib '../lib/';
use aliased 'AI::Prolog::Parser';
use aliased 'AI::Prolog::Term';
use aliased 'AI::Prolog::Engine';
my $parser = Parser->new("append(X,Y,[a,b,c,d]).");
my $query = Term->new($parser);
my $engine = Engine->new($query,Parser->consult(append_prog()));
print $engine->run;
while (my $result = $engine->more) {
print $result;
}
sub append_prog {
"append([], X, X)."
."append([W|X],Y,[W|Z]):- append(X,Y,Z).";
}
And the output:
append([],[a,b,c,d],[a,b,c,d])
append([a],[b,c,d],[a,b,c,d])
append([a,b],[c,d ],[a,b,c,d])
append([a,b,c],[d],[a,b,c,d])
append([a,b,c,d],[],[a,b,c,d])
I also want a method that will allow it to return "Perlish" data structures.
So far the code seems to be running ~ 1000 LIPS (Logical Inferences Per Second) and that is with no optimization (this means it appears to run about as fast as the Java applet.) I want to wait until I have a solid test suite and some decent documentation before I start profiling and optimizing.
If you really want to see the (hideous) code, you can download it, but it's not even an alpha yet. There are only a handful of tests and no docs, but if you cd into the examples directory, you can run the three programs there (the benchmark won't make much sense.) If you have any questions, post them here.
Side note: back in 1992, it was noted that decent Prolog implementations ran at about 10,000 to 100,000 LIPS. Needless to say, I have a long way to go and I don't expect to get there unless I switch to Inline::C for some bits.
Not to be picky... (Score:2)
I've been trying to follow all your posts, but I just don't understand 'em. Why have you put a lot of energy into that whole thief stealin' thing?
Re:Not to be picky... (Score:2)
I didn't write the tests firsts because I was porting this from W-Prolog and frankly, since I wasn't entirely certain what W-Prolog was doing half the time, I wasn't certain what I was writing tests for. However, by doing a faithful port from a known-good program, I could run them in parallel and keep the Perl one working properly. Now that it appears that I've nailed down the behavior of the Perl version, I'm writing tests. Curiously, in the process I've found a discrepancy between the Java and Perl ver
Sounds interesting... (Score:2)
- Jason
Re:Sounds interesting... (Score:2)
Actually, I doubt it's above your level of comprehension. Logic programming isn't that hard, it's just a weird way of looking at things. For example, remember syllogisms in logic class?
In prolog:
The :- is read as "if" and the comma is read as "and". I'm sure you can figure out what that means :)
In logic programming, you don't tell the computer how t
Well, when you put it like that... (Score:2)
I can see how it's kind of neat, especially getting computers to figure things out. I'm still stuck at seeing this, though, as a static set of switches. How is it learning or going beyond what you provide it? I mean, it seems like you're still having to provide a lot. When you say another mammal, it's only b/c you ruled that mammals have fur (and aren't shaved) that the mammal is furry. But you're st
Re:Well, when you put it like that... (Score:1)
I am curious... (Score:1)
Re:I am curious... (Score:2)
In the long term, the intent is to allow logic programming in Perl. However, I realize now that many people don't know what that is, so I'll write another entry to explain it. It's fascinating, but not something done much in Perl (because Perl has no native ability to do that, aside from a limited equivalent with regular expressions).
Native Logic Rules in Perl (Score:1)
For those that don't know what we're talking about, you might want to check out a Prolog Tutorial [google.com], there are quite a few available.
Bill
# I had a sig when sigs were cool
use Sig;
Re:Native Logic Rules in Perl (Score:2)
Actually, I have downloaded the WAM book and started working with it, but I don't have as much free time as I would like. That could be a very long project and the current implementation actually works (and also appears to be based on WAM, but it doesn't fully implement it.)
Re:Native Logic Rules in Perl (Score:1)
Yes, Inline::C would be a cleaner way to expedite your new WAM engine.
-Bill R
Bill
# I had a sig when sigs were cool
use Sig;
Re:Native Logic Rules in Perl (Score:2)
Thanks for the compliment. Frankly, I didn't know if anyone would even understand what I wrote :)