Class: Wongi::Engine::Template
- Inherits:
-
Struct
- Object
- Struct
- Wongi::Engine::Template
show all
- Includes:
- CoreExt
- Defined in:
- lib/wongi-engine/template.rb
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
#object ⇒ Object
Returns the value of attribute object
3
4
5
|
# File 'lib/wongi-engine/template.rb', line 3
def object
@object
end
|
#predicate ⇒ Object
Returns the value of attribute predicate
3
4
5
|
# File 'lib/wongi-engine/template.rb', line 3
def predicate
@predicate
end
|
#subject ⇒ Object
Returns the value of attribute subject
3
4
5
|
# File 'lib/wongi-engine/template.rb', line 3
def subject
@subject
end
|
#time ⇒ Object
Returns the value of attribute 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
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
27
28
29
|
# File 'lib/wongi-engine/template.rb', line 27
def contains? var
self.class.variable?( var ) && array_form.include?( var )
end
|
#hash ⇒ Object
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
|
#inspect ⇒ Object
68
69
70
|
# File 'lib/wongi-engine/template.rb', line 68
def inspect
"<~ #{subject.inspect} #{predicate.inspect} #{object.inspect} #{time}>"
end
|
#root? ⇒ Boolean
23
24
25
|
# File 'lib/wongi-engine/template.rb', line 23
def root?
subject == :_ && predicate == :_ && object == :_
end
|
#to_s ⇒ Object
72
73
74
|
# File 'lib/wongi-engine/template.rb', line 72
def to_s
inspect
end
|