Skip to content

bound variable unavailable to condition clause. #14

@robblovell

Description

@robblovell

In this simple example, the condition clause doesn't seem to be able to reference a bound variable from a previous part of the clause:

# 
# Example of situation where bound variable is not available to the condition clause.
#

$LOAD_PATH << File.join(File.dirname(__FILE__), '../lib/')
require 'ruleby'

include Ruleby

class Q
  def initialize(status,message,value)
    @status = status
    @message = message
    @value = value
  end
  attr :status, true
  attr :message, true
  attr :value, true
end

class HelloWorldRulebook < Rulebook
  def rules
=begin
    # original rule
    rule [Q, :p, {m.value=>:pv}, m.status == :HELLO],
         [Q, :q, m.status == :GOODBYE,m.value == b(:pv)]  do |v|
      puts v[:p].message + " " +v[:q].message
    end
=end
    # the next two rules should be equivalent to the original rule but are not.
    rule [Q, :p, {m.value=>:pv}, m.status == :HELLO],
         [Q, :q, m.status == :GOODBYE,m.value(&condition{|c| c == b(:pv)})]  do |v|
      puts v[:p].message + " " +v[:q].message
    end
    rule [Q, :p, {m.value=>:pv}, m.status == :HELLO],
         [Q, :q, m.status == :GOODBYE,m.value(b(:pv),&condition{|v,pv| v == pv})]  do |v|
      puts v[:p].message + " " +v[:q].message
    end
  
  end
end

engine :engine do |e|
  r=HelloWorldRulebook.new(e)
  r.rules
  e.assert Q.new(:HELLO, 'Hello',1)
  e.assert Q.new(:GOODBYE, 'World',1)
  e.match
end; 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions