rbprolog 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d723ef7238bd43d66ba6107479b1b3ceb3f2c343
4
- data.tar.gz: bfa0dc55e11633ec5d83ad1dcbbb02a5008dfa4c
3
+ metadata.gz: 1cea2edb5bbebc322e8b452964550d648524fc3c
4
+ data.tar.gz: a6fb9cea02cf48e00265a7a7b3f5f38e75e6f47d
5
5
  SHA512:
6
- metadata.gz: da369f5d469d14ee459e145ac505a4b513aa3db32f1617bf5262268c08b2b19c46960bf54eff4b577afaf063c91b561a1432bfe44bed9b8a168eeb0837b3c977
7
- data.tar.gz: 1c8216be63234451c9ac110cf1b02173198ec3491ffba96bcc6a6d5159550b82f7f819ee2c2de2753fbc4bb3ebd525ad94561d8077310eedb523b71fcfaab3f4
6
+ metadata.gz: 0d04a142120d61f6c8f2e367182c1f4359be3a50390b6529a77fdca925d41bb020824920fc1ad3b6706866c1206d107437538f7cafd218a71485984c37b44ac1
7
+ data.tar.gz: 25170cd1e81e96b96847ea6cc3f00df6efe040c9c98d1fba757ba8447b32d95c94314aaf0b4b797843fe1ff599d455da1be4628adb807ae4ff99fd4fd99c06c8
@@ -8,11 +8,11 @@ module Rbprolog
8
8
  end
9
9
 
10
10
  def each_deduce(context, rules, id)
11
- print "#{"\t" * id.size}#{id.join('.')} #{@sym}?(#{@args.join(', ')})"
11
+ #print "#{"\t" * id.size}#{id.join('.')} #{@sym}?(#{@args.join(', ')})"
12
12
 
13
13
  rules.select {|rule| rule.sym == @sym}.each_with_index do |rule, rule_index|
14
14
  context.scope(self) do |scoped_args|
15
- puts " => #{@sym}?(#{scoped_args.join(', ')})" if rule_index == 0
15
+ #puts " => #{@sym}?(#{scoped_args.join(', ')})" if rule_index == 0
16
16
 
17
17
  # rules.reject is to avoid endless loop caused by self reference
18
18
  rule.each_match(rules.reject {|item| item == rule}, *scoped_args, id + [rule_index]) do |hash|
@@ -9,17 +9,18 @@ module Rbprolog
9
9
  end
10
10
 
11
11
  def each_deduce(context, rules, id)
12
- print "#{"\t" * id.size}#{id.join('.')} ?(#{@args.join(', ')})"
12
+ #print "#{"\t" * id.size}#{id.join('.')} #{@expression}?)"
13
13
 
14
14
  context.scope(self) do |scoped_args|
15
- puts " => ?(#{scoped_args.join(', ')})"
16
-
17
15
  kclass = Class.new
18
16
  kclass.send(:define_singleton_method, :const_missing) do |sym|
19
- context.deduce(sym)
17
+ context.deduce(Var.new(sym))
20
18
  end
21
19
 
22
- yield context.binds if kclass.class_eval(@expression)
20
+ evaluation = kclass.class_eval(@expression)
21
+ #puts " => #{evaluation}"
22
+
23
+ yield context.binds if evaluation
23
24
  end
24
25
  end
25
26
  end
data/lib/rbprolog/rule.rb CHANGED
@@ -10,17 +10,17 @@ module Rbprolog
10
10
  end
11
11
 
12
12
  def each_match(rules, *args, id)
13
- print "#{"\t" * id.size}#{id.join('.')} #{@sym}(#{@args.join(', ')}).deduce(#{args.join(', ')})"
13
+ #print "#{"\t" * id.size}#{id.join('.')} #{@sym}(#{@args.join(', ')}).deduce(#{args.join(', ')})"
14
14
 
15
15
  context = Context.new
16
16
  context.scope(self) do |scoped_args|
17
17
  if self.match!(context, args)
18
- puts " => #{@sym}(#{@args.map {|arg| context.deduce(arg)}.join(', ')})"
18
+ #puts " => #{@sym}(#{@args.map {|arg| context.deduce(arg)}.join(', ')})"
19
19
  deduce_deductions(context, rules, *@deductions, id) do
20
20
  yield context.binds
21
21
  end
22
22
  else
23
- print "\n"
23
+ #print "\n"
24
24
  end
25
25
  end
26
26
  end
@@ -1,3 +1,3 @@
1
1
  module Rbprolog
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -9,8 +9,16 @@ class EvaluationLogic
9
9
 
10
10
  %w(a b c).each {|t| must 'win', t}
11
11
  must_not 'linux', 'd'
12
- can_not X, Y, :if => [must?(U, Y), ->{'U != X'}]
13
- can_not X, Y, :if => must_not?(X, Y)
12
+ must 'win', 'xp', 'e'
13
+
14
+ can_not TC, :if => must_not?(TC)
15
+
16
+ can_not X, TC, :if => [must?(U, TC), ->{'U != X'}]
17
+ can_not X, TC, :if => must_not?(X, TC)
18
+
19
+ can_not X, Y, TC, :if => [must?(U, V, TC), ->{'U != X || V != Y'}]
20
+ can_not X, TC, :if => must_not?(X, Y, TC)
21
+
14
22
  #can X, Y, :if => !can_not?(X, Y)
15
23
  end
16
24
 
@@ -25,5 +33,10 @@ class TestEvaluation < Test::Unit::TestCase
25
33
  assert_equal true, l.can_not?('linux', 'c')
26
34
 
27
35
  assert_equal(['a', 'b', 'c', 'd'], l.can_not!('linux', Rbprolog::Var.new(:G)).map {|hash| hash[:G]}.uniq.sort)
36
+ assert_equal([], l.can_not!('win', Rbprolog::Var.new(:G)).map {|hash| hash[:G]}.uniq.sort)
37
+
38
+ assert_equal true, l.must?('win', 'xp', 'e')
39
+ assert_equal([], l.can_not!('win', 'xp', Rbprolog::Var.new(:G)).map {|hash| hash[:G]}.uniq.sort)
40
+ assert_equal(['e'], l.can_not!('win', 'vista', Rbprolog::Var.new(:G)).map {|hash| hash[:G]}.uniq.sort)
28
41
  end
29
42
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbprolog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruijia Li
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-29 00:00:00.000000000 Z
11
+ date: 2013-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler