Parrotlog - Getting started
The inspiration for this project is primarily due to my reading On Lisp by Paul Graham, which talks about implementing non-deterministic search (or backtracking, if you will) with continuations (chapter 2022). Since I know Parrot supports continuations natively, it was an obvious choice. Some googling also revealed a very interesting PerlMonks post, entitled Perl and Prolog and Continuations... oh my!, which it turns out is the inspiration for Ovid's AI::Logic as well (which I discovered a few days ago).
Now, on to the implementation. Most of the documents I've found tell you to start your Parrot HLL project with a script called mk_language_shell.pl, but I found that it doesn't do quite what it say on the tin. Instead I used tools/dev/create_language.pl. This script creates a basic folder hierarchy similar to the one used by Rakudo. A quick tour of the files and folders:
build/
contains everything that has to do with the build process. Most interesting isPARROT_REVISION
which specifies which Parrot is required, andMakefile.in
which is where the build process can be extended.Configure.pl
does what it's called. Call it with--gen-parrot
to build the required Parrot version as well.t/
andsrc/
contain the usual bits
EDIT: I lied. Backtracking is chapter 22 of Graham's book. Chapter 20 is continuations.
I really wanted to continue work on AI::Prolog. Specifically, adding list support would have made it fairly robust (at least in Prolog terms). Other projects have led me astray, though.
I'm looking forward to you having something useful. Logic programming is the single biggest weakness of Rakudo.
Yeah, lists is something that I've been pondering a bit. For a first stab I think I'll just represent all lists with ./2 internally, but a more efficient representation might make sense in the more long-term perspective.