/tutorial/backtracking/tiny_prolog/test_pam.e
Specman e | 213 lines | 150 code | 55 blank | 8 comment | 0 complexity | e04f4c087beec2c1e2a37ad43b5a471c MD5 | raw file
1 2class TEST_PAM 3 4inherit 5 6 PAM_GLOBALS 7 8creation 9 10 make 11 12feature 13 14 pam_pro: PAM_PROCESSOR; 15 16 pam_printer: PAM_PRINTER; 17 18 pam_parser : PAM_EXPR_PARSER; 19 20feature 21 22 make is 23 do 24 !!pam_pro.make; 25 !!pam_printer.make; 26 !!pam_parser.make; 27 28 -- test1; 29 -- test2; 30 -- test3; 31 -- test4; 32 -- test5; 33 -- test6; 34 test7; 35 -- test8; 36 end 37 38 parse (txt: STRING) is 39 do 40 pam_parser.parse (txt); 41 if 42 pam_parser.error_detected 43 or else 44 pam_parser.warning_detected 45 or else 46 pam_parser.query 47 then 48 print (pam_parser.error_message); 49 die_with_code (exit_failure_code); 50 end 51 end 52 53 query (txt: STRING) is 54 do 55 pam_parser.parse (txt); 56 if 57 pam_parser.error_detected 58 or else 59 pam_parser.warning_detected 60 or else 61 pam_parser.fact 62 then 63 print (pam_parser.error_message); 64 die_with_code (exit_failure_code); 65 end; 66 pam_pro.query (pam_parser.parsed_expr); 67 end 68 69feature -- tests 70 71 test1 is 72 do 73 print ("-----------%N"); 74 75 parse("p(f(X),h(Y,f(a)),Y)."); 76 pam_printer.print_fact(pam_parser.parsed_expr,-1); 77 parse("p(Z,h(Z,W),f(W))."); 78 pam_printer.print_fact(pam_parser.parsed_expr,-1); 79 parse("p(Z,h(Z,W),f(W)):-t(Z,W),!,y(W,_)."); 80 pam_printer.print_fact(pam_parser.parsed_expr,-1); 81 82 print ("-----------%N"); 83 end 84 85 test2 is 86 do 87 print ("-----------%N"); 88 89 parse("cons([],R,R)."); 90 parse("cons([H1|T1],L2,[H1|R]) :- cons(T1,L2,R)."); 91 92 print ("-----------%N"); 93 94 query("cons([a,b,c],[e,f,g],R)?"); 95 end 96 97 test3 is 98 do 99 print ("-----------%N"); 100 101 parse("mix([],[],[])."); 102 parse("mix([H1|T1],L2,[H1|R]) :- mix(T1,L2,R)."); 103 parse("mix(L1,[H2|T2],[H2|R]) :- mix(L1,T2,R)."); 104 105 print ("-----------%N"); 106 107 query("mix([a,b],[e],R)?"); 108 end 109 110 test4 is 111 do 112 print ("-----------%N"); 113 114 parse("dans([X|Y],[],X,Y)."); 115 parse("dans([X|Y],[X|T],D,Q):-dans(Y,T,D,Q)."); 116 117 print ("-----------%N"); 118 119 query("dans([a,b,c,d,e],T,R,Q)?"); 120 query("dans([a,b,c,d,e],_,R,L)?"); 121 end 122 123 test5 is 124 do 125 print ("-----------%N"); 126 127 parse("permu([],[])."); 128 parse("permu([X|Y],[D|R]):-dans([X|Y],T,D,Q),cons(T,Q,Z),permu(Z,R)."); 129 130 print ("-----------%N"); 131 132 query("permu([a,b,c,d],R)?"); 133 end 134 135 test6 is 136 do 137 print ("-----------%N"); 138 139 --parse("in([c|Y],c):-!."); 140 parse("in([X|Y],X)."); 141 parse("in([_|Y],Z):-in(Y,Z)."); 142 143 print ("-----------%N"); 144 145 query("in([a,b,c],R)?"); 146 end 147 148 test7 is 149 do 150 print ("-----------%N"); 151 152 parse("clues(Maisons):-% 153 %maison(A, Maisons), couleur(A, rouge), nationalite(A, anglais), % 154 %maison(B, Maisons), nationalite(B, espagnol), animal(B, chien), % 155 %maison(C, Maisons), couleur(C, vert), boit(C, cafe), % 156 %maison(D, Maisons), nationalite(D, ukrainien), boit(D, the), % 157 %adroite(Maisons, E, F), couleur(E, vert), couleur(F, ivoire), % 158 %maison(G, Maisons), fume(G, winston), animal(G, escargot), % 159 %maison(H, Maisons), fume(H, kools), couleur(H, jaune), % 160 %milieu(Maisons, I), boit(I, lait), % 161 %premiere(Maisons, J), nationalite(J, norvegien), % 162 %voisins(Maisons, K, L), fume(K, chesterfields), animal(L, renard), % 163 %voisins(Maisons, M, N), fume(M, kools), animal(N, cheval), % 164 %maison(O, Maisons), fume(O, luckystrike), boit(O, jus_d_orange), % 165 %maison(P, Maisons), nationalite(P, japonais), fume(P, parliaments), % 166 %voisins(Maisons, Q, R), nationalite(Q, norvegien), couleur(R, bleu)."); 167 168 parse("couleur(maison(C,_,_,_,_), C)."); 169 parse("nationalite(maison(_,N,_,_,_), N)."); 170 parse("animal(maison(_,_,P,_,_), P)."); 171 parse("boit(maison(_,_,_,D,_), D)."); 172 parse("fume(maison(_,_,_,_,S), S)."); 173 174 parse("premiere(maisons(X,_,_,_,_), X)."); 175 176 parse("milieu(maisons(_,_,X,_,_), X)."); 177 178 parse("adroite(maisons(L,R,_,_,_), R, L)."); 179 parse("adroite(maisons(_,L,R,_,_), R, L)."); 180 parse("adroite(maisons(_,_,L,R,_), R, L)."); 181 parse("adroite(maisons(_,_,_,L,R), R, L)."); 182 183 parse("voisins(Xs, X, Y):-adroite(Xs, X, Y)."); 184 parse("voisins(Xs, X, Y):-adroite(Xs, Y, X)."); 185 186 parse("maison(X, maisons(X,_,_,_,_))."); 187 parse("maison(X, maisons(_,X,_,_,_))."); 188 parse("maison(X, maisons(_,_,X,_,_))."); 189 parse("maison(X, maisons(_,_,_,X,_))."); 190 parse("maison(X, maisons(_,_,_,_,X))."); 191 192 print ("-----------%N"); 193 194 query("clues(Maisons),% 195 %maison(X, Maisons), animal(X, zebre), nationalite(X, ZebraOwner),% 196 %maison(Y, Maisons), boit(Y, eau), nationalite(Y, WaterDrinker)?"); 197 end 198 199 test8 is 200 do 201 print ("-----------%N"); 202 203 parse("plus(s(X),Y,s(Z)):-plus(X,Y,Z)."); 204 parse("plus(z,X,X)."); 205 206 print ("-----------%N"); 207 208 query("plus(X,Y,s(s(s(s(z)))))?"); 209 end 210 211end -- class TEST_PAM 212 213