Class: Wongi::Engine::Template

Inherits:
Struct
  • Object
show all
Includes:
CoreExt
Defined in:
lib/wongi-engine/template.rb

Direct Known Subclasses

NegTemplate, OptionalTemplate

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from CoreExt

included

Constructor Details

#initialize(s = :_, p = :_, o = :_, time = 0) ⇒ Template

Returns a new instance of Template.



13
14
15
16
17
# File 'lib/wongi-engine/template.rb', line 13

def initialize s = :_, p = :_, o = :_, time = 0
  raise "Cannot work with continuous time" unless time.integer?
  raise "Cannot look into the future" if time > 0
  super
end

Instance Attribute Details

#objectObject

Returns the value of attribute object

Returns:

  • (Object)

    the current value of object



3
4
5
# File 'lib/wongi-engine/template.rb', line 3

def object
  @object
end

#predicateObject

Returns the value of attribute predicate

Returns:

  • (Object)

    the current value of predicate



3
4
5
# File 'lib/wongi-engine/template.rb', line 3

def predicate
  @predicate
end

#subjectObject

Returns the value of attribute subject

Returns:

  • (Object)

    the current value of subject



3
4
5
# File 'lib/wongi-engine/template.rb', line 3

def subject
  @subject
end

#timeObject

Returns the value of attribute time

Returns:

  • (Object)

    the current value of time



3
4
5
# File 'lib/wongi-engine/template.rb', line 3

def time
  @time
end

Class Method Details

.hash_for(*args) ⇒ Object



35
36
37
# File 'lib/wongi-engine/template.rb', line 35

def self.hash_for *args
  args.map( &:hash ).hash
end

.variable?(thing) ⇒ Boolean

Returns:

  • (Boolean)


9
10
11
# File 'lib/wongi-engine/template.rb', line 9

def self.variable? thing
  Symbol === thing && thing =~ /^[A-Z]/
end

Instance Method Details

#==(other) ⇒ Object



43
44
45
46
# File 'lib/wongi-engine/template.rb', line 43

def == other
  return false unless Template === other
  subject == other.subject && predicate == other.predicate && object == other.object
end

#===(wme) ⇒ Object



39
40
41
# File 'lib/wongi-engine/template.rb', line 39

def === wme
  wme =~ self if WME === wme
end

#=~(template) ⇒ Object



48
49
50
51
52
53
54
55
56
57
# File 'lib/wongi-engine/template.rb', line 48

def =~ template
  case template
  when Template
    ( template.subject == :_ || template.subject == subject ) &&
    ( template.predicate == :_ || template.predicate == predicate ) &&
    ( template.object == :_ || template.object == object )
  else
    raise "Templates can only match templates"
  end
end

#compile(context) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/wongi-engine/template.rb', line 60

def compile context
  tests, assignment = *JoinNode.compile( self, context.earlier, context.parameters )
  alpha = context.rete.compile_alpha( self )
  context.node = context.node.beta_memory.join_node( alpha, tests, assignment, context.alpha_deaf )
  context.earlier << self
  context
end

#contains?(var) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/wongi-engine/template.rb', line 27

def contains? var
  self.class.variable?( var ) && array_form.include?( var )
end

#hashObject



31
32
33
# File 'lib/wongi-engine/template.rb', line 31

def hash
  @hash ||= array_form.map( &:hash ).hash
end

#import_into(r) ⇒ Object



19
20
21
# File 'lib/wongi-engine/template.rb', line 19

def import_into r
  self.class.new r.import( subject ), r.import( predicate ), r.import( object ), time
end

#inspectObject



68
69
70
# File 'lib/wongi-engine/template.rb', line 68

def inspect
  "<~ #{subject.inspect} #{predicate.inspect} #{object.inspect} #{time}>"
end

#root?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/wongi-engine/template.rb', line 23

def root?
  subject == :_ && predicate == :_ && object == :_
end

#to_sObject



72
73
74
# File 'lib/wongi-engine/template.rb', line 72

def to_s
  inspect
end