NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.
All the Perl that's Practical to Extract and Report
Stories, comments, journals, and other submissions on use Perl; are Copyright 1998-2006, their respective owners.
Excellent tutorial! (Score:2)
This has motivated me to install the Münster Curry compiler [uni-muenster.de], a Haskell implementation of the Haskell-Prolog hybrid language Curry [uni-kiel.de].
I suspect it'll be a lot of fun reading about it. As for application programming, it seems that much of the semantic web stuff -- RDF in particular -- corresponds closely to logic programming models, so that might be a good vector to explain to people.
Re:Excellent tutorial! (Score:2)
I'm glad you liked the slides. I've been hearing a bit about Curry and I should dig into it. Incidentally, you may be interested in the response I just made to Dom. I list a couple of Prolog/RDF links which may prove interesting.
Re:Excellent tutorial! (Score:2)
freevariable annotation and the=:=equivalence operator.In Perl 6, this might be:
Does this seem sane to you? I wonder if P6L can handle this. :-)
Re:Excellent tutorial! (Score:2)
Well, there does seem to be a strong desire to get logical programming into P6, so I suspect that well-thought out proposals will be welcomed. The major problem I have in participating is two-fold. First, I simply don't have the experience with P6 to be able to make contributions that are going to fit well in the current model. Second, I fear that most who are involved are considerably brighter than I am. This makes me a poor sounding board for ideas. (I'm not trying to present this as false modesty. From my interactions with others, I think this is a flat statement of fact.)
That being said, I have a bit of a reservation about your proposal. Assuming that my $x is free; means that $x is an unbound logical variable, does this mean that it cannot be assigned to? That would fit with the logic paradigm, but can cause confusion with programmers do not immediately see the distinction. Luke Palmer suggested a different method of declaring them (if I understood him correctly), whereby one would write $`x. The backtick after the primary sigil would indicate that this is a logical variable. Thus, this type information would always be readily apparent.
Also, you example gives me pause because math is, regrettably, one area where logic programming breaks down:
Unless you can introduce constraints, the variables have infinitely many values with no upper or lower bounds to even reasonably start computation. Perhaps we can get a bit closer by adding traits and combining Luke's notation?
And the append/3 predicate might become:
That's awfully procedural, though, and I don't think it's what you're looking for.
Reply to This
Parent
Re:Excellent tutorial! (Score:2)
To define last with append in Curry, we write:
Translating this to Perl6:
Re:Excellent tutorial! (Score:2)
@lin thatlast:The trick of Curry is to introduce a special type, Success, that encapsulates constraint solutions. I'm still working through the tutorial [uni-kiel.de], so it will take a bit before coherent thoughts emerge...
Re:Excellent tutorial! (Score:2)
OK, I'm definitely liking this better. I think it can work. Is multi enough, though? Would assert or something similar be a better keyword so Perl can know that it's working with a fact or rule?