rbprolog 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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