Logical Programming With ruby-prolog

50 %
50 %
Information about Logical Programming With ruby-prolog
Technology

Published on February 11, 2009

Author: preston.lee

Source: slideshare.net

Description

How to implement logical programming concepts in Ruby using the ruby-prolog gem released by OpenRain. (http://openrain.com)

ruby-prolog Logical programming with Ruby declarations. 2009.02.09 - Preston Lee <preston.lee@openrain.com> - Http://prestonlee.com Tuesday, February 10, 2009

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

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

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

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

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 aroundn'), X1 is X - 1, english(beer,X1), write(' on the wall.n'), drink(beer, X1). Tuesday, February 10, 2009

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

Complex logical reasoning. The Towers of Hanoi Tuesday, February 10, 2009

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 quot;M IS N - 1quot; 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[quot;move a disc from the quot;], M is N-1, write[:X], write[quot; pole to the quot;], move(M,X,Z,Y), write[:Y], writenl[quot; pole quot;] move(1,X,Y,_), ] move(M,Z,Y,X). move[3,quot;leftquot;,quot;rightquot;,quot;centerquot;] /* move(3,left,right,center). */ end Tuesday, February 10, 2009

ACL Example examples/acls.rb Tuesday, February 10, 2009

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

Thanks! Code: http://github.com/preston/ruby-prolog/tree/master ✤ Releases: http://rubyforge.org/projects/ruby-prolog/ ✤ Tuesday, February 10, 2009

Add a comment

Related presentations

Related pages

ruby-prolog - Preston Lee's Blog

Logical programming paradigm. Declarative. We define the rules for the world, but not how to process them. Inherently recursive. The interpreter will ...
Read more

preston/ruby-prolog · GitHub - GitHub · Where software ...

ruby-prolog - A pure Ruby gem implemention of a Prolog-like DSL for AI and logical programming.
Read more

Logical Programming With ruby-prolog Slides | Preston Lee ...

A veteran entrepreneur, Preston provids senior leadership for companies focused on engaging, custom, dynamic software systems. He has become recognized for ...
Read more

A Taste of Logic Programming In Ruby - mrb: home

A Taste of Logic Programming In Ruby. ... I found rulog when searching for an implementation of a logic programming engine, ...
Read more

mariochavez/ruby-prolog · GitHub

ruby-prolog - A pure Ruby gem implemention of a Prolog-like DSL for AI and logical programming. ... mariochavez / ruby-prolog forked from preston/ruby-prolog.
Read more

Prolog | LinkedIn

View 48729 Prolog posts, presentations, experts, and more. ... Logical Programming With ruby-prolog. 6,158 Views. ruleml2012. RuleML2015: PSOA2Prolog: ...
Read more

Cascadia Ruby Conf 2012 A Taste of Prolog by Aja Hammerly ...

Cascadia Ruby Conf 2012 A Taste of Prolog by Aja Hammerly Confreaks. ... Logic Programming I - Duration: 50:40. UCBerkeley 28,393 views. 50:40
Read more