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.14159Implementing a basic OO system in 6 lines of code is kinda neat :-)
Cheers,
Adrian
