On 8 Mar 2005, at 19:18, Ovid wrote: [snip] My question in a nutshell: given 45 minutes to show a roomful of programmers with no prior experience in logic programming just how powerful it can be, what approach would you take? [snip]
I've used this little example to impress people (shamelessly stolen from <http://www.ainewsletter.com/newsletters/aix_0305.htm>.)
Start off with
member( X, [ X | _ ] ). member( X, [ _ | Z ] ) :- member( X, Z ).
which is enough to demonstrate the declarative and generative stuff you can get out of simple statements, then hit them with:
send( Object, Message ) :- class( Object, methods( Methods ) ), member( ( Message :- Method ), Methods ), call( Method ).
class( rectangle( H, W ), methods( [ ( area(A) :- A is H * W ), ( perimeter(P) :- P is 2 * (H + W) ) ] ) ). class( circle(R), methods( [ ( area(A) :- A is pi * R * R ), ( perimeter(P) :- 2 * pi * R ) ] ) ).
allowing us to do:
?- send( circle(1), area(A) ). A = 3.14159
Implementing a basic OO system in 6 lines of code is kinda neat :-)
Cheers,
Adrian