Merge branch 'nlp' of https://github.com/diogogithub/polynomialmani.pl into nlp
This commit is contained in:
commit
7a667c2cd8
85
polymani.pl
85
polymani.pl
@ -37,16 +37,15 @@
|
|||||||
* NLP *
|
* NLP *
|
||||||
*******************************/
|
*******************************/
|
||||||
|
|
||||||
debug_print(false).
|
|
||||||
|
|
||||||
%% polyplay() is det
|
%% polyplay() is det
|
||||||
%
|
%
|
||||||
% Interactive prompt for the NLP Interface
|
% Interactive prompt for the NLP Interface
|
||||||
%
|
%
|
||||||
polyplay :-
|
polyplay :-
|
||||||
|
%% Replace the prompt and save the old one
|
||||||
prompt(OldPrompt, '> '),
|
prompt(OldPrompt, '> '),
|
||||||
|
%% Read a line as codes, from the 'user_input' stream
|
||||||
read_line_to_codes(user_input, InCodes),
|
read_line_to_codes(user_input, InCodes),
|
||||||
%% read_string(user_input, "\n", "\r\t ", _, In),
|
|
||||||
prompt(_, OldPrompt),
|
prompt(_, OldPrompt),
|
||||||
split_string(InCodes, " ", "\r\t", LS),
|
split_string(InCodes, " ", "\r\t", LS),
|
||||||
maplist(name, LA, LS),
|
maplist(name, LA, LS),
|
||||||
@ -64,13 +63,21 @@ polyplay :-
|
|||||||
writeln(NC)
|
writeln(NC)
|
||||||
;
|
;
|
||||||
(
|
(
|
||||||
debug_print(true),
|
NC \== [],
|
||||||
write(LA),
|
write("Syntax error in token: "),
|
||||||
nl,
|
cons(H, _, NC),
|
||||||
write(TIn),
|
write(H),
|
||||||
nl
|
nl
|
||||||
;
|
;
|
||||||
process_input(TIn)
|
(
|
||||||
|
debug_print(true),
|
||||||
|
write(LA),
|
||||||
|
nl,
|
||||||
|
write(TIn),
|
||||||
|
nl
|
||||||
|
;
|
||||||
|
process_input(TIn)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
@ -80,6 +87,9 @@ polyplay :-
|
|||||||
),
|
),
|
||||||
!.
|
!.
|
||||||
|
|
||||||
|
%% Flag which determines whether to print the parsed input or to process it
|
||||||
|
debug_print(false).
|
||||||
|
|
||||||
process_input(command(CL, void)) :-
|
process_input(command(CL, void)) :-
|
||||||
do_process_input(CL).
|
do_process_input(CL).
|
||||||
process_input(command(CL, TCR)) :-
|
process_input(command(CL, TCR)) :-
|
||||||
@ -147,12 +157,16 @@ do_process_input(help(bye)) :-
|
|||||||
writeln("I can't get no relief").
|
writeln("I can't get no relief").
|
||||||
do_process_input(show_stored_polynomials) :-
|
do_process_input(show_stored_polynomials) :-
|
||||||
findall(nm(X,Y), polynomial_store(X,Y), D),
|
findall(nm(X,Y), polynomial_store(X,Y), D),
|
||||||
nlp_print_memory(D).
|
print_all_stored_variables(D).
|
||||||
do_process_input(show(store(P), T)) :-
|
do_process_input(show(store(P), T)) :-
|
||||||
|
( polynomial_store(P, _),
|
||||||
|
retractall(polynomial_store(P, _)); true ),
|
||||||
|
!,
|
||||||
assertz(polynomial_store(P, T)),
|
assertz(polynomial_store(P, T)),
|
||||||
write(P),
|
write(P),
|
||||||
write(" = "),
|
write(" = "),
|
||||||
print_polynomial_tree(T),
|
polynomial_tree_to_polynomial(T, Pl),
|
||||||
|
write(Pl),
|
||||||
nl.
|
nl.
|
||||||
do_process_input(show(load(P), void)) :-
|
do_process_input(show(load(P), void)) :-
|
||||||
P \== void,
|
P \== void,
|
||||||
@ -160,7 +174,8 @@ do_process_input(show(load(P), void)) :-
|
|||||||
polynomial_store(P, T),
|
polynomial_store(P, T),
|
||||||
write(P),
|
write(P),
|
||||||
write(" = "),
|
write(" = "),
|
||||||
print_polynomial_tree(T),
|
polynomial_tree_to_polynomial(T, Pl),
|
||||||
|
write(Pl),
|
||||||
nl
|
nl
|
||||||
;
|
;
|
||||||
write("Variable not stored"),
|
write("Variable not stored"),
|
||||||
@ -168,14 +183,17 @@ do_process_input(show(load(P), void)) :-
|
|||||||
).
|
).
|
||||||
do_process_input(show(P, T)) :-
|
do_process_input(show(P, T)) :-
|
||||||
P \== void,
|
P \== void,
|
||||||
|
P \== store(_),
|
||||||
T \== void,
|
T \== void,
|
||||||
write(P),
|
write(P),
|
||||||
write(" = "),
|
write(" = "),
|
||||||
print_polynomial_tree(T),
|
polynomial_tree_to_polynomial(T, Pl),
|
||||||
|
write(Pl),
|
||||||
nl.
|
nl.
|
||||||
do_process_input(show(void, T)) :-
|
do_process_input(show(void, T)) :-
|
||||||
T \== void,
|
T \== void,
|
||||||
print_polynomial_tree(T),
|
polynomial_tree_to_polynomial(T, Pl),
|
||||||
|
write(Pl),
|
||||||
nl.
|
nl.
|
||||||
do_process_input(store(P, T)) :-
|
do_process_input(store(P, T)) :-
|
||||||
assertz(polynomial_store(P, T)).
|
assertz(polynomial_store(P, T)).
|
||||||
@ -194,14 +212,19 @@ do_process_input(multiply(TN, PT)) :-
|
|||||||
write(SP),
|
write(SP),
|
||||||
nl.
|
nl.
|
||||||
|
|
||||||
print_polynomial_tree(op(Op, TL, TR)) :-
|
|
||||||
!,
|
%% print_all_stored_variables
|
||||||
write(TL),
|
%
|
||||||
write(Op),
|
% Prints the stored variables
|
||||||
TR \== void,
|
%
|
||||||
print_polynomial_tree(TR).
|
print_all_stored_variables([nm(X,T) | TS]) :-
|
||||||
print_polynomial_tree(T) :-
|
write(X),
|
||||||
write(T).
|
write(" = "),
|
||||||
|
polynomial_tree_to_polynomial(T, P),
|
||||||
|
write(P),
|
||||||
|
nl,
|
||||||
|
print_all_stored_variables(TS).
|
||||||
|
print_all_stored_variables([]).
|
||||||
|
|
||||||
polynomial_tree_to_polynomial(op(Op, TL, TR), P) :-
|
polynomial_tree_to_polynomial(op(Op, TL, TR), P) :-
|
||||||
!,
|
!,
|
||||||
@ -212,6 +235,9 @@ polynomial_tree_to_polynomial(op(Op, TL, TR), P) :-
|
|||||||
atom_concat(TermL, Op, Temp),
|
atom_concat(TermL, Op, Temp),
|
||||||
atom_concat(Temp, TermR, PA),
|
atom_concat(Temp, TermR, PA),
|
||||||
term_to_atom(P, PA).
|
term_to_atom(P, PA).
|
||||||
|
polynomial_tree_to_polynomial(load(P), Pl) :-
|
||||||
|
polynomial_store(P, TP),
|
||||||
|
polynomial_tree_to_polynomial(TP, Pl).
|
||||||
polynomial_tree_to_polynomial(T, T).
|
polynomial_tree_to_polynomial(T, T).
|
||||||
%% Tests:
|
%% Tests:
|
||||||
%% ?- polynomial_tree_to_polynomial(op(+, 2, op(+, 2, op(*, 1, y))), S).
|
%% ?- polynomial_tree_to_polynomial(op(+, 2, op(+, 2, op(*, 1, y))), S).
|
||||||
@ -376,6 +402,7 @@ parse_operation(*) --> [times].
|
|||||||
|
|
||||||
parse_polynomial_operand(T) --> parse_number(T).
|
parse_polynomial_operand(T) --> parse_number(T).
|
||||||
parse_polynomial_operand(T) --> parse_power(T).
|
parse_polynomial_operand(T) --> parse_power(T).
|
||||||
|
parse_polynomial_operand(load(T)) --> parse_stored_variable(T), { ! }.
|
||||||
|
|
||||||
:- dynamic polynomial_store/2.
|
:- dynamic polynomial_store/2.
|
||||||
|
|
||||||
@ -410,9 +437,6 @@ parse_polynomial(T, NC, NC) :-
|
|||||||
parse_polynomial(T) -->
|
parse_polynomial(T) -->
|
||||||
parse_polynomial_explicit(_-_, T),
|
parse_polynomial_explicit(_-_, T),
|
||||||
!.
|
!.
|
||||||
parse_polynomial(T) -->
|
|
||||||
parse_stored_variable(T),
|
|
||||||
!.
|
|
||||||
%% Tests:
|
%% Tests:
|
||||||
%% ?- parse_polynomial(T, [], _).
|
%% ?- parse_polynomial(T, [], _).
|
||||||
%@ false.
|
%@ false.
|
||||||
@ -487,7 +511,7 @@ parse_command(show(store(P), T)) -->
|
|||||||
parse_polynomial(T),
|
parse_polynomial(T),
|
||||||
[as],
|
[as],
|
||||||
parse_stored_variable(P).
|
parse_stored_variable(P).
|
||||||
parse_command(show(load(P), void)) -->
|
parse_command(show(P, void)) -->
|
||||||
[show],
|
[show],
|
||||||
parse_stored_variable(P).
|
parse_stored_variable(P).
|
||||||
parse_command(show(void, T)) -->
|
parse_command(show(void, T)) -->
|
||||||
@ -537,17 +561,6 @@ parse_input(command(TC, void)) -->
|
|||||||
%% ?- parse_input(CT, [show, 3], _).
|
%% ?- parse_input(CT, [show, 3], _).
|
||||||
%@ CT = command(show(void, 3), void).
|
%@ CT = command(show(void, 3), void).
|
||||||
|
|
||||||
%% nlp_print_memory
|
|
||||||
%
|
|
||||||
% Prints the NLP memory
|
|
||||||
%
|
|
||||||
nlp_print_memory([nm(X,Y)|T]) :-
|
|
||||||
write(X),
|
|
||||||
write(" = "),
|
|
||||||
print_polynomial_tree(Y),
|
|
||||||
nl,
|
|
||||||
nlp_print_memory(T).
|
|
||||||
nlp_print_memory([]).
|
|
||||||
|
|
||||||
/*******************************
|
/*******************************
|
||||||
* UI *
|
* UI *
|
||||||
|
Reference in New Issue
Block a user