1 ! Copyright (C) 2019-2020 KUSUMOTO Norio.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: tools.test logic lists assocs math kernel namespaces
5 logic.examples.factorial
12 logic.examples.zebra2 ;
16 LOGIC-PREDS: cato mouseo creatureo ;
18 SYMBOLS: Tom Jerry Nibbles ;
21 { mouseo Nibbles } fact
23 { t } [ { cato Tom } query ] unit-test
24 { f } [ { { cato Tom } { cato Jerry } } query ] unit-test
25 { { H{ { X Jerry } } H{ { X Nibbles } } } } [
29 { creatureo X } { cato X } rule
31 { { H{ { Y Tom } } } } [ { creatureo Y } query ] unit-test
33 LOGIC-PREDS: youngo young-mouseo ;
34 { youngo Nibbles } fact
40 { { H{ { X Nibbles } } } } [ { young-mouseo X } query ] unit-test
42 { creatureo X } { mouseo X } rule
44 { { H{ { X Tom } } H{ { X Jerry } } H{ { X Nibbles } } } } [
50 { cato Y } ;; { mouseo Y }
53 creatureo get defs>> first second first pred>> name>>
56 creatureo get defs>> second second first pred>> name>>
61 { cato Y } ;; { mouseo Y }
64 creatureo get defs>> first second first pred>> name>>
67 creatureo get defs>> second second first pred>> name>>
70 { { H{ { X Tom } } H{ { X Jerry } } H{ { X Nibbles } } } } [
74 { { H{ { Y Tom } } H{ { Y Jerry } } } } [
75 { creatureo Y } 2 nquery
82 { creatureo X } { dogo X } rule
84 { cato Y } ;; { mouseo Y }
87 creatureo get defs>> first second first pred>> name>>
90 creatureo get defs>> second second first pred>> name>>
93 creatureo get defs>> third second first pred>> name>>
97 { creatureo X } { dogo X } rule
99 { cato Y } ;; { mouseo Y }
102 creatureo get defs>> first second first pred>> name>>
105 creatureo get defs>> second second first pred>> name>>
108 creatureo get defs>> third second first pred>> name>>
113 { cato Y } ;; { mouseo Y }
116 LOGIC-PREDS: likes-cheeseo dislikes-cheeseo ;
117 { likes-cheeseo X } { mouseo X } rule
118 { dislikes-cheeseo Y } {
120 \+ { likes-cheeseo Y }
123 { f } [ { dislikes-cheeseo Jerry } query ] unit-test
124 { t } [ { dislikes-cheeseo Tom } query ] unit-test
126 { L{ Tom Jerry Nibbles } } [ L{ Tom Jerry Nibbles } ] unit-test
127 { t } [ { membero Jerry L{ Tom Jerry Nibbles } } query ] unit-test
130 { membero Spike [ Tom Jerry Nibbles L{ } cons cons cons ] } query
133 TUPLE: house living dining kitchen in-the-wall ;
134 LOGIC-PREDS: houseo ;
139 { in-the-wall Jerry }
143 { { H{ { X Nibbles } } } } [
153 LOGIC-PREDS: is-ao consumeso ;
154 SYMBOLS: mouse cat milk cheese fresh-milk Emmentaler ;
157 { is-ao Jerry mouse }
158 { is-ao Nibbles mouse }
159 { is-ao fresh-milk milk }
160 { is-ao Emmentaler cheese }
164 { consumeso X milk } {
169 { { consumeso X cheese } { is-ao X mouse } }
170 { { consumeso Tom mouse } { !! f } }
171 { { consumeso X mouse } { is-ao X cat } }
176 H{ { X milk } { Y fresh-milk } }
177 H{ { X cheese } { Y Emmentaler } }
180 { { consumeso Jerry X } { is-ao Y X } } query
182 { { H{ { X milk } { Y fresh-milk } } } } [
183 { { consumeso Tom X } { is-ao Y X } } query
187 { is-ao a-cat cat } fact
189 H{ { X milk } { Y fresh-milk } }
190 H{ { X mouse } { Y Jerry } }
191 H{ { X mouse } { Y Nibbles } }
194 { { consumeso a-cat X } { is-ao Y X } } query
199 { f } [ { creatureo X } query ] unit-test
202 { mouseo Jerry } fact
203 { mouseo Nibbles } fact*
204 { { H{ { Y Nibbles } } H{ { Y Jerry } } } } [
208 { mouseo Jerry } retract
209 { { H{ { X Nibbles } } } } [
213 { mouseo Jerry } fact
214 { { H{ { X Nibbles } } H{ { X Jerry } } } } [
217 { mouseo __ } retract-all
218 { f } [ { mouseo X } query ] unit-test
220 { { mouseo Jerry } { mouseo Nibbles } } facts
221 SYMBOLS: big small a-big-cat a-small-cat ;
222 { cato big a-big-cat } fact
223 { cato small a-small-cat } fact
224 { { H{ { X Tom } } } } [ { cato X } query ] unit-test
227 H{ { X big } { Y a-big-cat } }
228 H{ { X small } { Y a-small-cat } }
230 } [ { cato X Y } query ] unit-test
232 { H{ { X Tom } } H{ { X Jerry } } H{ { X Nibbles } } }
233 } [ { creatureo X } query ] unit-test
235 { cato __ __ } retract-all
236 { f } [ { cato X Y } query ] unit-test
237 { { H{ { X Tom } } } } [ { cato X } query ] unit-test
239 LOGIC-PREDS: factorialo N_>_0 N2_is_N_-_1 F_is_F2_*_N ;
240 LOGIC-VARS: N N2 F F2 ;
241 { factorialo 0 1 } fact
246 { F_is_F2_*_N F F2 N }
248 { N_>_0 N } [ N of 0 > ] callback
250 { { N2_is_N_-_1 N2 N } [ dup N of 1 - N2 unify ] }
251 { { F_is_F2_*_N F F2 N } [ dup [ N of ] [ F2 of ] bi * F unify ] }
254 { { H{ { F 1 } } } } [ { factorialo 0 F } query ] unit-test
255 { { H{ { F 1 } } } } [ { factorialo 1 F } query ] unit-test
256 { { H{ { F 3628800 } } } } [ { factorialo 10 F } query ] unit-test
258 factorialo clear-pred
259 { factorialo 0 1 } fact
262 [ [ N of 1 - ] N2 is ]
264 [ [ [ F2 of ] [ N of ] bi * ] F is ]
267 { { H{ { F 1 } } } } [ { factorialo 0 F } query ] unit-test
268 { { H{ { F 1 } } } } [ { factorialo 1 F } query ] unit-test
269 { { H{ { F 3628800 } } } } [ { factorialo 10 F } query ] unit-test