Logical Programming With ruby-prolog

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Notes on slide 1

    announce: rubyology content and google group.


    Two people are siblings if and only if they share a common parent.
    A widow is a living married female with a deceased spouse.
    Mary is a female. Mary is married to Nick. Nick is deceased.
    Who are the widows?


    [sibling].
    sibling(charlie, X).
    parent_child(X, sally).

    You *can* execute multiple statements in order.







    5 Favorites

    Logical Programming With ruby-prolog - Presentation Transcript

    1. ruby-prolog Logical programming with Ruby declarations. 2009.02.09 - Preston Lee <preston.lee@openrain.com> - Http://prestonlee.com Tuesday, February 10, 2009
    2. Logical programming paradigm. Declarative. ✤ We define the rules for the world, but not how to process them. Inherently recursive. ✤ The interpreter will automatically recurse to evaluate a query behind the scenes. Turing complete. ✤ You can program without objects or functions, if you so choose. Artificial intelligence. ✤ It’s easier to define and resolve complex logical problems when we think mathematically. Tuesday, February 10, 2009
    3. Core Prolog concepts. Rules ✤ Generic semantic definitions (predicates) of how your world works via clauses. ✤ Declarations are formal mathematics (predicate logic) in programming syntax. ✤ Facts ✤ Assertions of truth about the world. ✤ Bob is Charlie’s father. ✤ Bob is Dale’s father. ✤ Queries ✤ Attempts to resolve an unknown logical statement using the rule given the facts. ✤ Tuesday, February 10, 2009
    4. Project history. tiny_prolog resolver/unification implementation from teh ✤ internets. Various small additional patches. Refactored to be object-oriented, not mess with ✤ method_missing globally, play nice with garbage collection and support multiple simultaneous contexts. Test cases from scratch, and various snippets ported from ✤ Prolog. Tuesday, February 10, 2009
    5. Simple family tree, in Prolog. Rules ✤ We are siblings if we share a parent. ✤ A father is a parent. ✤ sibling(X, Y) :- parent_child(Z, X), parent_child(Z, Y). A mother is a parent. ✤ parent_child(X, Y) :- father_child(X, Y). parent_child(X, Y) :- mother_child(X, Y). Facts ✤ mother_child(alice, charlie). Alice is Charlie’s mother. father_child(bob, charlie). ✤ father_child(bob, dale). Bob is Charlie’s father. ✤ /* * Who are Charle's siblings? Bob is Dale’s father. ✤ * sibling(charlie, X). * Queries ✤ * Who are Charlie's parents? * parent_child(X, sally). Who are Alice’s siblings? */ ✤ Tuesday, February 10, 2009
    6. Imperative programming support. /******************************************************* * 99 Bottles of Beer * Paul J. DeMarco 9/20/2002 * beer.pro * To execute start gprolog (others may work) * consult('beer.pro'). * drink(beer,99). *******************************************************/ english(beer,0):- write('no more bottle of beer'). english(beer,1):- write('1 bottle of beer'). english(beer,X):- X >= 2, write( X ) , write(' bottles of beer'). drink(beer,X):- X >= 1, english(beer,X), write(' on the wall, '), english(beer,X), write(', take one down, pass it around\\n'), X1 is X - 1, english(beer,X1), write(' on the wall.\\n'), drink(beer, X1). Tuesday, February 10, 2009
    7. ruby-prolog c = RubyProlog::Core.new c.instance_eval do vendor['dell'].fact vendor['apple'].fact model['ultrasharp'].fact model['xps'].fact model['macbook'].fact model['iphone'].fact manufactures['dell', 'ultrasharp'].fact manufactures['dell', 'xps'].fact manufactures['apple', 'macbook'].fact Prolog-like DSL. manufactures['apple', 'iphone'].fact ✤ is_a['xps', 'laptop'].fact is_a['macbook', 'laptop'].fact is_a['ultrasharp', 'monitor'].fact Object-oriented wrapper. ✤ is_a['iphone', 'phone'].fact kind['laptop'] kind['monitor'] Not as complete as Prolog. kind['phone'] ✤ model[:M] <<= [manufactures[:V, :M]] vendor_of[:V, :K] <<= [vendor[:V], manufactures[:V, :M], is_a[:M, :K]] p query(is_a[:K, 'laptop']) p query(vendor_of[:V, 'phone']) end Tuesday, February 10, 2009
    8. Complex logical reasoning. The Towers of Hanoi Tuesday, February 10, 2009
    9. Two implementations. Prolog ruby-prolog c = RubyProlog::Core.new c.instance_eval do move(1,X,Y,_) :- move[0,:X,:Y,:Z] <<= :CUT write('Move top disk from '), move[:N,:A,:B,:C] <<= [ write(X), is(:M,:N){|n| n - 1}, # reads as \"M IS N - 1\" write(' to '), move[:M,:A,:C,:B], write(Y), write_info[:A,:B], nl. move[:M,:C,:B,:A] ] move(N,X,Y,Z) :- write_info[:X,:Y] <<= [ N>1, write[\"move a disc from the \"], M is N-1, write[:X], write[\" pole to the \"], move(M,X,Z,Y), write[:Y], writenl[\" pole \"] move(1,X,Y,_), ] move(M,Z,Y,X). move[3,\"left\",\"right\",\"center\"] /* move(3,left,right,center). */ end Tuesday, February 10, 2009
    10. ACL Example examples/acls.rb Tuesday, February 10, 2009
    11. Ideas for the future. active_prolog - Logical interface to relational ActiveRecord objects. ✤ logical_authentication - Easy custom ACL creation and enforcement. ✤ logical_search - Custom DB search query builder using English-like ✤ predicates. ... ✤ Tuesday, February 10, 2009
    12. Thanks! Code: http://github.com/preston/ruby-prolog/tree/master ✤ Releases: http://rubyforge.org/projects/ruby-prolog/ ✤ Tuesday, February 10, 2009

    + Preston LeePreston Lee, 9 months ago

    custom

    1841 views, 5 favs, 0 embeds more stats

    How to implement logical programming concepts in Ru more

    More info about this document

    CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

    Go to text version

    • Total Views 1841
      • 1841 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 5
    • Downloads 29
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories