From d298364d0f8042f83f78b7c0c12a5bbb33e5162c Mon Sep 17 00:00:00 2001 From: Diogo Cordeiro Date: Sat, 24 Nov 2018 20:34:55 +0000 Subject: [PATCH] Implement is_polynomial_as_list_valid_in_predicate and refactored is_term_valid_in_predicate to is_polynomial_valid_in_predicate --- polymani.pl | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/polymani.pl b/polymani.pl index 6a78207..ceb70a1 100644 --- a/polymani.pl +++ b/polymani.pl @@ -39,7 +39,7 @@ argument) and vice-versa. */ poly2list(P, L) :- - is_term_valid_in_predicate(P, "poly2list"), + is_polynomial_valid_in_predicate(P, "poly2list"), polynomial_to_list(P, L), !. @@ -48,7 +48,7 @@ poly2list(P, L) :- another polynomial as a list. */ simpoly_list(L, S) :- - is_polynomial_list_valid_in_predicate(L, "simpoly_list"), %TODO IMPLEMENT + is_polynomial_as_list_valid_in_predicate(L, "simpoly_list"), simplify_polynomial_as_list(L, S), !. @@ -57,7 +57,7 @@ simpoly_list(L, S) :- as another polynomial as an expression. */ simpoly(P, S) :- - is_term_valid_in_predicate(P, "simpoly"), + is_polynomial_valid_in_predicate(P, "simpoly"), simplify_polynomial(P, S), !. @@ -67,8 +67,8 @@ simpoly(P, S) :- be ground. The polynomial resulting from the sum is in simplified form. */ scalepoly(P1, P2, S) :- - is_term_valid_in_predicate(P1, "scalepoly"), - is_term_valid_in_predicate(P2, "scalepoly"), + is_polynomial_valid_in_predicate(P1, "scalepoly"), + is_polynomial_valid_in_predicate(P2, "scalepoly"), scale_polynomial(P1, P2, S), !. @@ -78,8 +78,8 @@ scalepoly(P1, P2, S) :- The polynomial resulting from the sum is in simplified form. */ addpoly(P1, P2, S) :- - is_term_valid_in_predicate(P1, "addpoly"), - is_term_valid_in_predicate(P2, "addpoly"), + is_polynomial_valid_in_predicate(P1, "addpoly"), + is_polynomial_valid_in_predicate(P2, "addpoly"), add_polynomial(P1, P2, S), !. @@ -207,17 +207,17 @@ term(L * R) :- %@ _1188 in inf..sup . %% Doesn't give all possible terms, because number(N) is not reversible -%% is_term_valid_in_predicate(+T, +F) is det +%% is_polynomial_valid_in_predicate(+T, +F) is det % -% Returns true if valid Term, fails with UI message otherwise. -% The fail message reports which Term is invalid and in which +% Returns true if valid polynomial, fails with UI message otherwise. +% The failure message reports which polynomial is invalid and in which % predicate the problem ocurred. % -is_term_valid_in_predicate(P, _) :- +is_polynomial_valid_in_predicate(P, _) :- %% If P is a valid polynomial, return true polynomial(P), !. -is_term_valid_in_predicate(P, F) :- +is_polynomial_valid_in_predicate(P, F) :- %% Writes the polynomial and fails otherwise write("Invalid polynomial in "), write(F), @@ -225,12 +225,30 @@ is_term_valid_in_predicate(P, F) :- write(P), fail. %% Tests: -%% ?- is_term_valid_in_predicate(1, "Test"). +%% ?- is_polynomial_valid_in_predicate(1, "Test"). %@ true. -%% ?- is_term_valid_in_predicate(a*4-0*x, "Test"). +%% ?- is_polynomial_valid_in_predicate(a*4-0*x, "Test"). %@ Invalid polynomial in Test: a*4-0*x %@ false. +%% is_polynomial_as_list_valid_in_predicate(+L, +F) is det +% +% Returns true if the polynomial represented as list is valid, +% fails with UI message otherwise. +% The failure message reports which polynomial is invalid and +% in which predicate the problem ocurred. +% +is_polynomial_as_list_valid_in_predicate(L, F) :- + %% If L is a valid polynomial, return true + list_to_polynomial(L, P), + is_polynomial_valid_in_predicate(P, F). +%% Tests: +%% ?- is_polynomial_as_list_valid_in_predicate([1], "Test"). +%@ true. +%% ?- is_polynomial_as_list_valid_in_predicate([0*x, a*4], "Test"). +%@Invalid polynomial in Test: a*4+0*x +%@false. + %% polynomial(+M:atom) is semidet % % Returns true if polynomial, false otherwise.