rubylog 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. data/Gemfile +1 -1
  2. data/README.hu.rb +58 -0
  3. data/README.rdoc +248 -89
  4. data/Rakefile +6 -1
  5. data/VERSION +1 -1
  6. data/bin/rubylog +18 -0
  7. data/examples/dcg.rb +35 -0
  8. data/examples/dcg2.rb +42 -0
  9. data/examples/enumerators.rb +30 -0
  10. data/examples/factorial.rb +9 -8
  11. data/examples/hanoi.rb +24 -0
  12. data/examples/hello.rb +11 -5
  13. data/examples/parsing.rb +27 -0
  14. data/examples/primitives.rb +24 -0
  15. data/examples/theory.rb +22 -10
  16. data/lib/rubylog/builtins/default.rb +10 -0
  17. data/lib/rubylog/builtins/file_system.rb +15 -0
  18. data/lib/rubylog/builtins/logic.rb +109 -0
  19. data/lib/rubylog/builtins/reflection.rb +94 -0
  20. data/lib/rubylog/builtins/term.rb +47 -0
  21. data/lib/rubylog/dsl/array_splat.rb +25 -0
  22. data/lib/rubylog/dsl/primitives.rb +17 -0
  23. data/lib/rubylog/dsl/thats.rb +22 -0
  24. data/lib/rubylog/dsl/variables.rb +30 -0
  25. data/lib/rubylog/dsl.rb +35 -17
  26. data/lib/rubylog/errors.rb +19 -1
  27. data/lib/rubylog/interfaces/assertable.rb +16 -0
  28. data/lib/rubylog/interfaces/callable.rb +18 -0
  29. data/lib/rubylog/interfaces/composite_term.rb +47 -0
  30. data/lib/rubylog/interfaces/predicate.rb +8 -0
  31. data/lib/rubylog/interfaces/procedure.rb +60 -0
  32. data/lib/rubylog/interfaces/term.rb +41 -0
  33. data/lib/rubylog/mixins/array.rb +118 -0
  34. data/lib/{class.rb → rubylog/mixins/class.rb} +2 -2
  35. data/lib/rubylog/mixins/hash.rb +8 -0
  36. data/lib/rubylog/mixins/kernel.rb +5 -0
  37. data/lib/rubylog/mixins/method.rb +3 -0
  38. data/lib/rubylog/mixins/object.rb +8 -0
  39. data/lib/rubylog/mixins/proc.rb +37 -0
  40. data/lib/rubylog/mixins/string.rb +104 -0
  41. data/lib/rubylog/mixins/symbol.rb +44 -0
  42. data/lib/rubylog/simple_procedure.rb +8 -0
  43. data/lib/rubylog/{clause.rb → structure.rb} +32 -31
  44. data/lib/rubylog/theory.rb +368 -79
  45. data/lib/rubylog/variable.rb +102 -23
  46. data/lib/rubylog.rb +33 -25
  47. data/logic/builtins/file_system_logic.rb +23 -0
  48. data/logic/builtins/reflection_logic.rb +40 -0
  49. data/logic/dereference_logic.rb +23 -0
  50. data/logic/directory_structure_logic.rb +19 -0
  51. data/logic/dsl_logic.rb +29 -0
  52. data/logic/errors_logic.rb +9 -0
  53. data/logic/guard_logic.rb +115 -0
  54. data/logic/list_logic.rb +55 -0
  55. data/logic/map_logic.rb +15 -0
  56. data/logic/multitheory.rb +23 -0
  57. data/logic/recursion_logic.rb +12 -0
  58. data/logic/string_logic.rb +41 -0
  59. data/logic/thats_logic.rb +51 -0
  60. data/logic/variable_logic.rb +24 -0
  61. data/rubylog.gemspec +85 -46
  62. data/spec/bartak_guide_spec.rb +57 -62
  63. data/spec/builtins/all_spec.rb +99 -0
  64. data/spec/builtins/and_spec.rb +22 -0
  65. data/spec/builtins/array_spec.rb +16 -0
  66. data/spec/builtins/branch_or_spec.rb +27 -0
  67. data/spec/builtins/cut_spec.rb +44 -0
  68. data/spec/builtins/fail_spec.rb +5 -0
  69. data/spec/builtins/false_spec.rb +5 -0
  70. data/spec/builtins/in_spec.rb +38 -0
  71. data/spec/builtins/is_false_spec.rb +12 -0
  72. data/spec/builtins/is_spec.rb +26 -0
  73. data/spec/builtins/matches_spec.rb +23 -0
  74. data/spec/builtins/or_spec.rb +22 -0
  75. data/spec/{rubylog/builtins → builtins}/splits_to.rb +0 -0
  76. data/spec/builtins/then_spec.rb +27 -0
  77. data/spec/builtins/true_spec.rb +5 -0
  78. data/spec/clause_spec.rb +82 -0
  79. data/spec/compilation_spec.rb +61 -0
  80. data/spec/custom_classes_spec.rb +43 -0
  81. data/spec/dereference.rb +10 -0
  82. data/spec/{inriasuite.rb → inriasuite_spec.rb} +2 -9
  83. data/spec/queries_spec.rb +150 -0
  84. data/spec/recursion_spec.rb +4 -4
  85. data/spec/ruby_code_spec.rb +52 -0
  86. data/spec/rules_spec.rb +97 -0
  87. data/spec/spec_helper.rb +6 -2
  88. data/spec/theory_spec.rb +28 -0
  89. data/spec/unification_spec.rb +84 -0
  90. data/spec/variable_spec.rb +26 -0
  91. metadata +153 -180
  92. data/examples/4queens.rb +0 -10
  93. data/examples/calculation.rb +0 -12
  94. data/examples/concepts.rb +0 -46
  95. data/examples/fp.rb +0 -56
  96. data/examples/historia_de_espana.rb +0 -31
  97. data/examples/idea.rb +0 -143
  98. data/examples/lists.rb +0 -5
  99. data/examples/mechanika.rb +0 -409
  100. data/examples/parse.rb +0 -15
  101. data/lib/array.rb +0 -24
  102. data/lib/method.rb +0 -4
  103. data/lib/object.rb +0 -5
  104. data/lib/proc.rb +0 -4
  105. data/lib/rubylog/builtins.rb +0 -193
  106. data/lib/rubylog/callable.rb +0 -20
  107. data/lib/rubylog/composite_term.rb +0 -38
  108. data/lib/rubylog/dsl/constants.rb +0 -15
  109. data/lib/rubylog/dsl/first_order_functors.rb +0 -9
  110. data/lib/rubylog/dsl/global_functors.rb +0 -3
  111. data/lib/rubylog/dsl/second_order_functors.rb +0 -8
  112. data/lib/rubylog/internal_helpers.rb +0 -16
  113. data/lib/rubylog/predicate.rb +0 -34
  114. data/lib/rubylog/proc_method_additions.rb +0 -69
  115. data/lib/rubylog/term.rb +0 -20
  116. data/lib/rubylog/unifiable.rb +0 -19
  117. data/lib/symbol.rb +0 -35
  118. data/script/inriasuite2spec +0 -0
  119. data/script/inriasuite2spec.pl +0 -22
  120. data/spec/rubylog/clause_spec.rb +0 -81
  121. data/spec/rubylog/variable_spec.rb +0 -25
  122. data/spec/rubylog_spec.rb +0 -914
@@ -1,31 +0,0 @@
1
- require 'rubylog'
2
- require 'pp'
3
-
4
- class << Rubylog::Theory.new!
5
- Symbol.rubylog_functor :lugar_historico, :during
6
- Integer.rubylog_functor :during
7
-
8
- A.lugar_historico.if A.in [
9
- :Hispania_prehistorica,
10
- :Hispania_romana,
11
- :Hispania_visigoda,
12
- :Al_Andalus,
13
- :Imperio_espanol,
14
- :Reino_Constitucional_Espanol
15
- ]
16
-
17
- :Hispania_prehistorica.during! [-800000,200]
18
- A.during([X,Y]).if A.matches(Integer).and {|a,x,y| (x..y) === a}
19
-
20
-
21
-
22
-
23
- def self.solve k
24
- pp *k.solutions
25
- end
26
-
27
- puts
28
- pp *(A.lugar_historico.and A.during(P).and 200.during(P)).variable_hashes
29
-
30
-
31
- end
data/examples/idea.rb DELETED
@@ -1,143 +0,0 @@
1
-
2
-
3
-
4
- # ActiveSpec
5
- user = User.new(:username => 'luke')
6
- spec = SizeSpecification.new(6, :username)
7
- spec.satisfied_by? user
8
-
9
- spec = CompositeSpecification.new
10
- spec.add_specification(SizeSpecification.new(6, :username))
11
- spec.add_specification(CollectionSpecification.new(18..30, :age))
12
- spec.add_specification(ConfirmationSpecification.new(:password))
13
- spec.satisfied_by?(User.new)
14
- #=> false
15
-
16
- # Rubylog
17
- user = User.new(:username => 'luke')
18
- U.username_valid.if U.size_of(:username,6)
19
- user.username_valid?
20
-
21
- # ActiveSpec
22
- spec = CollectionSpecification.new(1..10, :age)
23
- # or validates_inclusion_of :age, :in => 1..10
24
- spec_two = NotSpecification.new(CollectionSpecification.new(1..10, :age))
25
- # or validates_exclusion_of :age, :in => 1..10
26
-
27
- # Rubylog
28
- U.age_valid.if ~ U.is_included(:age, 1..10)
29
-
30
- # ActiveSpec
31
- spec = ProcSpecification.new(proc{ |object|
32
- # do something with object
33
- # and return true or false
34
- })
35
- spec.satisfied_by? some_object
36
-
37
- U.everything_valid.if {|u|
38
- # do something w/ u and return true/false
39
- }
40
-
41
- # ActiveSpec
42
- class UserSpecification < ActiveSpec::Base
43
- requires_presence_of :username, :password
44
- requires_size 6, :password
45
- requires_confirmation_of :password
46
- requires_inclusion_in 18..30, :age
47
- end
48
- UserSpecification.satisfied_by?(some_user)
49
-
50
- # Rubylog
51
- UserValidationTheory = Rubylog::Theory.new do
52
- protected
53
- U.invalid.if (U.username=N) & N.blank
54
- U.invalid.if (U.password=P) & P.size=K & K.is_not 6
55
- U.invalid.if (U.password_confirmation=C) & (U.password=P) & (K.is_not P)
56
- U.invalid.if (U.age=A) & ~:include[18..30, A]
57
- public
58
- U.valid_user.if ~U.invalid
59
- end
60
-
61
- User.include_theory UserValidationTheory
62
- some_user.valid_user?
63
-
64
-
65
- # ActiveSpec
66
- specification :valid_user do
67
- requires_presence_of :username, :password
68
- requires_confirmation_of :password
69
- must_satisfy :another_specification
70
- end
71
-
72
- ValidUserSpecification.satisfied_by?(some_user)
73
-
74
- # Rubylog
75
- # app/theories/valid_user_theory.rb
76
- theory :valid_user do
77
- U.valid_user.if ~U.invalid
78
- protected
79
- U.invalid.if (U.username=N) & N.blank
80
- U.invalid.if (U.password=P) & P.size=K & K.is_not 6
81
- U.invalid.if (U.password_confirmation=C) & (U.password=P) & (K.is_not P)
82
- U.invalid.if (U.age=A) & ~:include[18..30, A]
83
- end
84
-
85
- User.include_theory :valid_user
86
- some_user.valid_user?
87
-
88
-
89
-
90
-
91
-
92
- # ActiveSpec
93
- class User
94
- must_satisfy :valid_user_specification
95
-
96
- # optional :if argument takes a symbol or a block
97
- # and can be used for conditional evaluation of
98
- # specifications
99
- must_satisfy :activated_user_specification, :if => :activated?
100
- end
101
-
102
- user = User.new
103
- user.satisfies_specs?
104
- # evaluates ValidUserSpecification
105
- user.activated = true
106
- user.satisfies_specs?
107
- # evaluates both specifications
108
-
109
-
110
- # Rubylog
111
- class User
112
- include_theory :valid_user, :activated_user
113
- def satisfies_specs?
114
- !bad?
115
- end
116
- end
117
-
118
- theory :valid_user do
119
- U.bad.if ~U.valid_user
120
- protected
121
- #...
122
- end
123
-
124
- theory :activated_user do
125
- U.bad.if U.activated.and ~U.valid_activated_user
126
- protected
127
- # ...
128
- end
129
-
130
-
131
-
132
-
133
-
134
-
135
-
136
-
137
-
138
-
139
-
140
-
141
-
142
-
143
-
data/examples/lists.rb DELETED
@@ -1,5 +0,0 @@
1
- require 'rubylog'
2
-
3
- class << Rubylog.theory
4
- end
5
-
@@ -1,409 +0,0 @@
1
- # encoding: utf-8
2
- require 'rubylog'
3
- require 'pp'
4
-
5
- class Range
6
- def choose
7
- self.begin + rand(self.end-self.begin+1)
8
- end
9
- end
10
-
11
- class Array
12
- def choose
13
- self[(rand*size).to_i]
14
- end
15
- end
16
-
17
-
18
- class << TimeTheory = Rubylog::Theory.new!
19
- TimeTheory.predicate [:elt,2]
20
- end
21
-
22
- class << MechanikaTheory = Rubylog::Theory.new!
23
- Symbol.send :include, TimeTheory.public_interface
24
- Object.rubylog_functor \
25
- :egy
26
- Symbol.rubylog_functor \
27
- :nobel_dijas,
28
- :ember,
29
- :modszer,
30
- :def,
31
- :of,
32
- :kutatott,
33
- :felfedezte,
34
- :kidolgozta,
35
- :javasolta,
36
- :megmagyarazza,
37
- :igazolja,
38
- :mennyiseg,
39
- :during,
40
- :mertekegysege
41
- Rubylog::Clause.rubylog_functor\
42
- :learn,
43
- :all_learn,
44
- :see,
45
- :all_see,
46
- :during
47
- MechanikaTheory.predicate [:fizikus,1]
48
- MechanikaTheory.discontinuous [:def,2], [:ember,1], [:elt,2], [:modszer,1], [:of,2], [:egy,2], [:during,2], [:nobel_dijas, 3]
49
-
50
-
51
- X.ember.if X.egy :filozofus
52
- X.ember.if X.egy :fizikus
53
-
54
- X.egy(:filozofus).if X.in [:Szokratesz, :Demokritosz, :Platon, :Arisztotelesz, :Arkhimedesz, :Ptolemaiosz]
55
-
56
- :Szokratesz. elt! [-469,-399]
57
- :Demokritosz. elt! [-460,-370]
58
- :Platon. elt! [-427,-347]
59
- :Arisztotelesz.elt! [-384,-322]
60
- :Arkhimedesz. elt! [-287,-212]
61
- :Ptolemaiosz. elt! [ 85, 161]
62
-
63
- X.modszer.if X.in [
64
- :megfigyeles,
65
- :kiserlet,
66
- :meres,
67
- :torveny,
68
- :elmelet,
69
- :hipotezis,
70
- :modell,
71
- :korrespondancia_elv
72
- ]
73
-
74
- :kiserlet.def! "Kísérlet az, amikor az általunk kiválasztott esemény számára tudatosan olyan feltételeket teremtünk, hogy az megismételhető legyen különböző, általunk előírt körülmények között."
75
-
76
- :meres.def! "Valamilyen önkényesen választott egységgel történő összehasonlítás"
77
-
78
- :torveny.def! "Mérhető mennyiségek közti összefüggés."
79
- :torveny.def! "A mért eredmények közti kapcsolat megfogalmazása matematikai összefüggés formájában"
80
-
81
- :hipotezis.def! "Az elmélet kidolgozása közben tett feltételezés. Ha az elmélet következtetéseit a tapasztalat megerősíti, akkor el kell fogadni a hipotézist, különben el kell vetni"
82
-
83
- :modell.def! "Egyszerűsítő feltevés a valóság vizsgálata során."
84
- X.egy(:modell).if X.in [:merev_test, :tomegpont, :abszolut_rugalmas_test, :idealis_gaz]
85
-
86
- :korrespondancia_elv.def! "A jelenségeket általánosabban leíró elmélet a speciálisabb elmélet eredményeit tartalmazza, mint határesetet."
87
- [:relativisztikus_sebessegformula, :galilei_fele_sebessegosszegzesi_keplet].egy :korrespondancia_elv
88
-
89
- :Leonardo_da_Vinci.ember!.elt! [1452, 1519]
90
-
91
- :Galileo_Galilei.egy!(:fizikus).elt! [1564,1642]
92
-
93
- :Isaac_Newton.egy!(:fizikus).elt!([1642,1727]).kutatott!(:optika)
94
-
95
- :Albert_Einstein.egy!(:fizikus).elt!([1879,1955]).nobel_dijas!(:fizika, 1921)
96
-
97
- :Blaise_Pascal.egy!(:fizikus).elt!([1623,1662])
98
-
99
- :Robert_Hooke.egy!(:fizikus).elt!([1635,1703])
100
-
101
- :Daniel_Bernoulli.egy!(:fizikus).elt!([1700,1782])
102
-
103
- :Roger_Bacon.egy!(:filozofus).elt!([1214,1292])
104
-
105
- :Karl_Gauss.egy!(:fizikus).egy!(:matematikus).elt!([1777,1855])
106
-
107
-
108
-
109
- :indukcio.modszer!.of!(:kiserleti_fizika).def!("Tapasztalatgyűjtés után általánosítás útján elméletek felépítése")
110
- :dedukcio.modszer!.of!(:elmeleti_fizika).def!("Alapelvekből levezeti a konkrét összefüggéseket, és összeveti a valósággal")
111
-
112
- (X.egy :Kepler_torveny).all(:gravitacios_torveny.megmagyarazza(X)).egy! :deduckio
113
- :specialis_relativitaselmelet.of!(:Einstein).megmagyarazza(:merkur_perihelium_mozgasa).egy!(:indukcio)
114
- :altalanos_relativitaselmelet.of!(:Einstein).megmagyarazza(:fenysebesseg_keplet?.of!(:Armand_Fizeau.egy!(:fizikus).elt! [1819,1896])).egy!(:indukcio)
115
- (:elektromagneses_hullamok_kiserleti_igazolasa.of!(:Heinrich_Hertz.egy!(:fizikus).elt!([1857,1897])).igazolja :elektromagneses_hullamok_elmelete.of!(:Maxwell)).egy!(:dedukcio)
116
-
117
- :CERN_kutatasok.egy! :alapkutatas.modszer!
118
-
119
- # Mérés
120
-
121
- X.mennyiseg.if X.in [:ut, :ido, :sebesseg, :tomeg]
122
-
123
- :SI.during! [1790,ANY]
124
-
125
- :hosszusag.mertekegysege! :m
126
- :m.def("A Föld Dunquerque-Barcelona délkörének 40-milliomod része.").during! [1790,1874]
127
- :m.def("A mintaméter két vonása közötti távolság").during! [1874,1960]
128
- :m.def("1650763.73 * a kripton 2p10 és 5d5 energiaszintjei közötti átmenet során kibocsátott fény hullámhossza").during! [1960,1983]
129
- :Bay_Zoltan.egy!(:fizikus).elt!([1900,1992]).javasolta!( :m.def("A vákumban terjedő fénysebesség 1/299792458 s alatti útja").during! [1983,ANY] )
130
-
131
- Symbol.rubylog_functor :per
132
- Rubylog::Clause.rubylog_functor :per
133
- MechanikaTheory.discontinuous [:per,3]
134
-
135
- :km.per! :m, 1000
136
- :dm.per! :m, 0.1
137
- :cm.per! :m, 0.01
138
- :mm.per! :m, 0.001
139
- :um.per! :m, 1e-6
140
- :nm.per! :m, 1e-9
141
- :angstrom.per! :m, 1e-10
142
-
143
- :inch.per! :cm, 2.54
144
- :foot.per! :inch, 12
145
- :yard.per! :foot, 3
146
- :mile.per! :km, 1.61
147
-
148
- :fenyev.per! :km, 9.4605e12
149
- :parsec.per! :fenyev, 3.2616
150
-
151
- :negyszogol.per! :m2, 3.6
152
- :katasztralis_hold.per! :negyszogol, 1600
153
-
154
- A.per(B,N).if A.per(X,N1).and X.per(B,N2).and N.is{|a,b,n,x,n1,n2|n1*n2}
155
-
156
- Symbol.rubylog_functor :mero_eszkoz, :tavolsaga, :magassaga, :atmeroje,
157
- :hossza, :vastagsaga, :mero_modszer, :sugara, :pontossaga
158
- Symbol.rubylog_functor :megmerte
159
- Rubylog::Clause.rubylog_functor :using
160
- MechanikaTheory.discontinuous [:tavolsaga,3], [:magassaga,2], [:hossza,2],
161
- [:vastagsaga,2], [:atmeroje,2], [:sugara,2], [:megmerte,2], [:pontossaga, 2]
162
-
163
- X.egy(:hosszusag.mero_eszkoz).if X.in [
164
- :merorud,
165
- :meroszalag,
166
- :tolomero,
167
- :mikrometercsavar,
168
- :szferometer,
169
- :katetometer,
170
- :komparator
171
- ]
172
- :haromszogeles.egy! :hosszusag.mero_modszer
173
- :Bay_Zoltan.megmerte(:Fold.tavolsaga :Hold, X).using!(:radiohullamos_tavolsagmeres.egy! :hosszusag.mero_modszer).if :true
174
-
175
- Symbol.rubylog_functor :galaxis, :csillag
176
- MechanikaTheory.discontinuous [:csillag,1]
177
- Numeric.rubylog_functor :m, :szogperc
178
-
179
- :Fold.tavolsaga! :Andromeda.galaxis!, 2e22.m
180
- :Fold.tavolsaga! :Proxima_Centauri.csillag!, 4e16.m
181
- :Fold.tavolsaga! :Nap.csillag!, 1.5e11.m
182
- :Fold.tavolsaga! :Hold, 3.8e8.m
183
- :Fold.sugara! 6.4e6.m
184
- :muhold_foldkozeli_pontja.magassaga! 2e5.m
185
- :focipalya.hossza! 1e2.m
186
- :zsilettpenge.vastagsaga! 1e-4.m
187
- :sejt.atmeroje! 1e-5.m
188
- :virus.atmeroje! 1e-7.m
189
- :mikroaramkor_huzaljai.vastagsaga! 1e-7.m
190
- :molekula.atmeroje 1e-9.m
191
- :atom.atmeroje 1e-10.m
192
- :atommag.atmeroje 1e-14.m
193
-
194
- X.egy(:szog.mero_eszkoz).if X.in [
195
- :egyetemes_szogmero.def!("Két egymáshoz pontosan hajló szárból álló, nóniuszos skálával ellátott készülék"),
196
- :teodolit.def!("Függőlegesen és vízszintesen elforgatható, fonalkeresztes távcsővel ellátott készülék. Körnóniusz és nagyító.").pontossaga(1.szogperc)
197
- ]
198
-
199
- :ultrahangos
200
- :interferogramos
201
-
202
- # Idomeres
203
- #
204
-
205
- "Valamilyen periodikusan ismétlődő jelenség"
206
-
207
- :nap.per! :s, 86400
208
- :tropikus_ev.per! :nap, 365.2422
209
- :csillagmasodperc.per(:s, K).if :tropikus_ev.per(:nap,N) & K.is{|_,n| n/(n+1)}
210
-
211
- Symbol.rubylog_functor :hasznal
212
- MechanikaTheory.discontinuous [:hasznal,2]
213
-
214
- X.egy(:ido.mero_eszkoz).if X.in [
215
- :mechanikus_ora.hasznal!(:csavarrugo),
216
- :elektromos_ora.hasznal!(:elektromotor),
217
- :ingaora.hasznal!(:rugo),
218
- :regi_elektronikus_ora.hasznal!(:halozati_50Hz),
219
- :elektronikus_ora.hasznal!(:kvarcoszcillator),
220
- ]
221
-
222
- :metronom.egy! :ingaora
223
-
224
- Symbol.rubylog_functor :szarmaztatott_mennyiseg, :alapmennyiseg, :mennyiseg
225
- MechanikaTheory.discontinuous [:mennyiseg,1]
226
-
227
- X.szarmaztatott_mennyiseg.if X.mennyiseg.and X.alapmennyiseg.is_false
228
- X.mennyiseg.if X.alapmennyiseg
229
-
230
- X.alapmennyiseg.if X.in [
231
- :hosszusag, :tomeg, :ido, :aramerosseg, :homerseklet, :anyagmennyiseg, :fenyerosseg
232
- ]
233
-
234
- Symbol.rubylog_functor :otta, :zeta, :exa, :peta, :tera, :giga, :mega, :kilo,
235
- :hekto, :deka, :deci, :centi, :milli, :mikro, :nano, :piko, :femto, :atto
236
-
237
- X.otta.per X, 1e24
238
- X.zeta.per X, 1e21
239
- X.exa. per X, 1e18
240
- X.peta.per X, 1e15
241
- X.tera.per X, 1e12
242
- X.giga.per X, 1e9
243
- X.mega.per X, 1e6
244
- X.kilo.per X, 1e3
245
- X.hekto.per X, 1e2
246
- X.deka.per X, 1e1
247
- X.deci.per X, 1e-1
248
- X.centi.per X, 1e-2
249
- X.milli.per X, 1e-3
250
- X.mikro.per X, 1e-6
251
- X.nano.per X, 1e-9
252
- X.piko.per X, 1e-12
253
- X.femto.per X, 1e-15
254
- X.atto. per X, 1e-18
255
-
256
-
257
-
258
-
259
- [:hl, :hPa, :dag, :dkg, :dm, :cm, :cg, :cl, :cGy, :cSv]
260
-
261
-
262
- # Méréshibák
263
-
264
- :parallaxishiba.def! "A leolvasás értéke függ a szemünk helyzetétől, ha a tárgy nem érintkezik a skálával."
265
-
266
- :szisztematikus_hiba.def! "A mérőeszköz felépítéséből, környezete rá gyakorolt hatásából, használatának módjából eredő hiba."
267
-
268
- :statisztikus_hiba.def! "Olyan kísérletekben, amelyek kimenetelében a véletlen is szerepet játszik, bizonyos eloszlású (tipikusan normál vagy logaritmikus normál eloszlású) lesz az eredmény."
269
-
270
- Symbol.rubylog_functor :hibacsokkento_modszer
271
-
272
- X.hibacsokkento_modszer.if X.in [
273
- :finomabb_meroeszkoz_hasznalata,
274
- :tukros_leolvasas,
275
- :mereshatar_beallitasa,
276
- :a_mennyiseg_tobbszoroset_merjuk,
277
- :az_emberi_tenyezo_kiiktatasa,
278
- :kiugro_ertekek_elhagyasa
279
- ]
280
-
281
- Numeric.rubylog_functor :pm
282
- Rubylog::Clause.rubylog_functor :times, :gives
283
-
284
- 100.0.pm(1.0).times(3.1415.pm(0.00005)).gives!((100 * 3.1415).pm(100*3.1415*(1.0/100.0 + 0.00005/3.1415)))
285
-
286
-
287
- Symbol.rubylog_functor :eletkora, :idotartama, :periodusideje, :athaladasi_ideje
288
- Numeric.rubylog_functor :s
289
- MechanikaTheory.discontinuous [:eletkora,2], [:idotartama, 2], [:periodusideje, 2], [:athaladasi_ideje, 3]
290
-
291
- :univerzum.eletkora! 4e17.s
292
- :Fold.eletkora! 1.3e17.s
293
- :emberiseg.eletkora! 1e13.s
294
- :piramisok.eletkora! 1e11.s
295
- :ember.eletkora! 2e9.s
296
- :ev.per! :s, 1.2e7
297
- :nap.per! :s, 8.64e4
298
- :egy_meteres_fonalinga.periodusideje 2.s
299
- :sziv.periodusideje 8e-1.s
300
- :hang.periodusideje 1e-3.s
301
- :hang.periodusideje 1e-4.s
302
- :radiohullam.periodusideje 1e-6.s
303
- :radiohullam.periodusideje 1e-9.s
304
- :racsrezges.periodusideje 1e-13.s
305
- :feny.periodusideje 2e-15.s
306
- :nuklearis_utkozes.idotartama 1e-22.s
307
- :feny.athaladasi_ideje :proton.atmeroje, 3.3e-24.s
308
-
309
-
310
-
311
-
312
-
313
-
314
-
315
-
316
-
317
-
318
-
319
-
320
-
321
-
322
-
323
-
324
-
325
-
326
-
327
-
328
-
329
-
330
- Clause.see.if(
331
- Clause._puts &
332
- Vars.is {|clause|clause.rubylog_variables.select{|v|
333
- !v.assigned?}} &
334
- (V.in Vars).all(
335
- V._print & '?'._puts) &
336
- proc{gets} &
337
- (Clause &
338
- (V.in Vars).all(V._puts) | :true)
339
-
340
- )
341
-
342
- Clause.learn.if(
343
- (
344
- Clause._puts &
345
- Vars.is {|clause|clause.rubylog_variables.select{|v|
346
- !v.assigned?}} &
347
- (V.in Vars).all(
348
- V._print & '.is '._print & V.is{eval gets} &
349
- Clause &
350
- "Correct"._puts
351
- )
352
- ) | (
353
- "Wrong"._puts &
354
- Clause &
355
- Clause._p &
356
- (ANY.in 1..10).all(:nl) &
357
- :fail
358
- )
359
- )
360
-
361
-
362
- A.all_learn(B).if(
363
- :repeat &
364
- A.one(B.learn.fails)
365
- )
366
-
367
- A.all_see(B).if(
368
- A.all(B.see)
369
- )
370
-
371
-
372
- def self.ask question
373
- p question
374
- puts "X = ?"
375
- gets
376
- p(*question.to_a)
377
- puts
378
- end
379
-
380
- def self.ask_something functor=nil, arity=nil, n=nil
381
- functor ||= MechanikaTheory.database.keys.choose
382
- arity ||= MechanikaTheory.database[functor].keys.choose
383
- clause = MechanikaTheory.database[functor][arity].choose
384
- return unless clause.is_a? Rubylog::Clause
385
- head = clause[0]
386
- solution = head.solutions.choose
387
- n ||= (0..solution.arity-1).choose
388
- args = solution.args.dup
389
- args[n] = X
390
- question = Rubylog::Clause.new functor, *args
391
- ask question
392
- end
393
-
394
- while true
395
- begin
396
- #ask_something :elt,2,1
397
- ask_something
398
- rescue StandardError
399
- end
400
- end
401
-
402
-
403
- #(
404
- #X.ember.all_see X.elt [Szuletett, Meghalt]
405
- #X.modszer.all_see X.def D
406
- #).solve
407
-
408
- #pp *(X.elt Y).solutions
409
- end
data/examples/parse.rb DELETED
@@ -1,15 +0,0 @@
1
- require 'rubylog'
2
-
3
- class << Rubylog.theory
4
- include Rubylog::DSL::DCG
5
-
6
- :sentence.means :subject.and :verb.and :object
7
- :subject .means :modifier.and :noun
8
- :noun. means [:cat].or [:mouse].or [:polar_bear]
9
- :modifier.means [:the]
10
- :verb .means [:chases].or [:eats]
11
-
12
- end
13
-
14
-
15
-
data/lib/array.rb DELETED
@@ -1,24 +0,0 @@
1
- class Array
2
-
3
- # Unifiable methods
4
- include Rubylog::Unifiable
5
- def rubylog_unify other
6
- return super{yield} unless other.instance_of? self.class
7
- if empty?
8
- yield if other.empty?
9
- else
10
- self[0].rubylog_unify other[0] do
11
- self[1..-1].rubylog_unify other[1..-1] do
12
- yield
13
- end
14
- end
15
- end
16
- end
17
-
18
- # CompositeTerm methods
19
- include Rubylog::CompositeTerm
20
- def rubylog_clone &block
21
- block[map{|t|t.rubylog_clone &block}]
22
- end
23
-
24
- end
data/lib/method.rb DELETED
@@ -1,4 +0,0 @@
1
- class Method
2
- include Rubylog::ProcMethodAdditions
3
- include Rubylog::DSL::SecondOrderFunctors
4
- end
data/lib/object.rb DELETED
@@ -1,5 +0,0 @@
1
- class Object
2
- include Rubylog::Term
3
- include Rubylog::Unifiable
4
- include Rubylog::DSL::FirstOrderFunctors
5
- end
data/lib/proc.rb DELETED
@@ -1,4 +0,0 @@
1
- class Proc
2
- include Rubylog::ProcMethodAdditions
3
- include Rubylog::DSL::SecondOrderFunctors
4
- end