----- Original Message ----
> From: Brad Bowman <[EMAIL PROTECTED]>
> "let" variables and "hypothetical" assignments within rules may be a
> good starting point.

Hi Brad,

Caveat:  I'm also tremendously underqualified to to make serious proposals here.

Interesting idea.  As I understand hypothetical variables, they are similar in 
concept to variables in Prolog, but they still have the problem that they 
really are variables which can be assigned to.  Thus, if you have a "logical" 
iterator binding values to variables and someone else assigns a value, what 
then?  You can break everything in very mysterious ways.  That's why Luke 
Palmer (I think it was Luke) suggested a "twigil" for the variables:

  let $`x = 3;

That could be a logic variable which could only be assigned to hypothetically.  
Any initial assignment to a logical variable would effectively be declaring a 

> > There's also the question of non-logical behavior in logic
> > programming. What happens if you try to use math in Perl6 logic
> > programming? Generally speaking, math is "non-logical" in the sense
> > that it's used in Prolog (see the aforementioned article). Opening
> > and reading from a file is also non-logical (you can't backtrack over
> > it). How are those issues to be handled?
> Closures may have an "undo" trait which should be written to revert
> the side-effects of the closure when it receives an UNDO control
> exception (the block fails, see Definition of Success above).

Hmm, the only real problem, as you noted, is having to explicitly code the UNDO 
behavior, but for non-logical behaviors, maybe that's not too bad?  Still, what 
would happen with deleting a file?  It's very likely that you can't easily UNDO 
that, so certain behaviors can't be backtracked over.  I wonder how Mercury and 
Haskell handle issue like this?  (I realize Haskell is functional and not 
logical, but I still don't know how their monads work or if they would be 
applicable :)

> There's some information about this in S05, with more info promised:

> http://dev.perl.org/perl6/doc/design/syn/S05.html#Matching_against_non-strings

Ooh, looks promising.  In that scenario, is a hash viewed as an array of pairs? 
 If so, we could potentially have logic programming matching just about any 
abitrary data structure.

-- 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/

Reply via email to