-
Notifications
You must be signed in to change notification settings - Fork 40
Open
Description
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;
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels