diff --git a/polymani.pl b/polymani.pl index b761a68..643f105 100644 --- a/polymani.pl +++ b/polymani.pl @@ -55,26 +55,32 @@ polyplay :- ( parse_input(TIn, LA, NC), ( - TIn == void, - writeln("I didn't understand what you want."), - writeln(NC) + TIn == void, + writeln("I didn't understand what you want."), + writeln(NC) ; process_input(TIn) ) - ; + ; writeln("I didn't understand what you want.") - ), - polyplay + ), + polyplay ), !. -process_input(show(P, void)) :- - P \== void, - polynomial_store(P, T), - write(P), - write(" = "), - print_polynomial_tree(T), - nl. +%process_input(show(P, void)) :- +% P \== void, +% polynomial_store(P, T), +% write(P), +% write(" = "), +% print_polynomial_tree(T), +% nl. +process_input(command(C1, C2)) :- + process_input(C1), + process_input(C2). +process_input(show_stored_polynomials) :- + findall(nm(X,Y), polynomial_store(X,Y),D), + nlp_print_memory(D). process_input(show(P, T)) :- P \== void, T \== void, @@ -88,12 +94,19 @@ process_input(show(void, T)) :- nl. process_input(store(P, T)) :- assertz(polynomial_store(P, T)), + write(P), + write(" = "), + print_polynomial_tree(T), nl. +process_input(forget(P)) :- + retract(polynomial_store(P,_)). process_input(simplify(P)) :- polynomial_tree_to_polynomial(P, PP), simpoly(PP, SP), write(SP), nl. +process_input(op(Op, TL, TR)) :- + process_input(simplify(op(Op, TL, TR))). print_polynomial_tree(op(Op, TL, TR)) :- write(TL), @@ -190,7 +203,9 @@ parse_number_explicit(_, T, T, [], []) :- !. parse_number(T, SL, NC) :- - parse_number_explicit(void, void, T, SL, NC). + parse_number_explicit(void, void, T1, SL, NC), + polynomial_tree_to_polynomial(T1, PP), + simpoly(PP, T). %% Tests: %% ?- parse_number(T, [two], _). %@ T = 2. @@ -319,20 +334,22 @@ parse_polynomial_explicit(void-_, T) --> %% ?- parse_polynomial(T, [two, plus, two, plus, one, times, y], _). %@ T = op(+, op(+, 2, 2), op(*, 1, y)). - -parse_command(show(void, T)) --> %% NOTE Probably easier if the tree is always binary - [show], - parse_polynomial(T). -parse_command(show(P, T)) --> +parse_command(show_stored_polynomials) --> + [show, stored, polynomials]. +parse_command(store(P, T)) --> [show], parse_polynomial(T), [as], [P]. +parse_command(forget(P)) --> + [forget], + [P]. +parse_command(show(void, T)) --> %% NOTE Probably easier if the tree is always binary + [show], + parse_polynomial(T). parse_command(show(P, void)) --> [show], [P]. -parse_command(show_all) --> - [show, stored, polynomials]. parse_command(store(P, T)) --> [let], [P], @@ -351,6 +368,12 @@ parse_command(op(*, TN, TP)) --> parse_number(TN), [by], parse_polynomial(TP). +parse_command(op(+, TN, TP)) --> + [add], + parse_polynomial(TN), + [with], + parse_polynomial(TP). + parse_input(command(TCL, TCR)) --> parse_command(TCL), [and], @@ -368,7 +391,8 @@ parse_input(void, [], _). nlp_print_memory([nm(X,Y)|T]) :- write(X), write(" = "), - writeln(Y), + print_polynomial_tree(Y), + nl, nlp_print_memory(T). nlp_print_memory([]).