diff --git a/src/helper_files/helper.cpp b/src/helper_files/helper.cpp index 59681cab32ca766bcf150426367350fddc7b2ba0..2321d2e4fe610eac4e3e1f8fdb5db6cc6919a91a 100644 --- a/src/helper_files/helper.cpp +++ b/src/helper_files/helper.cpp @@ -132,4 +132,65 @@ void returnVectorInformation(Row< size_t > vector, float **vecArr, SP_integer *v // return the Matrix as one long Array *vecArr = convertToArray(vector); -} \ No newline at end of file +} + + +void raisePrologSystemExeption(const char *message) +{ + SP_term_ref messageTerm=SP_new_term_ref(); + SP_term_ref t1=SP_new_term_ref(); + + SP_put_string(messageTerm, message); + + SP_cons_functor(t1, SP_atom_from_string("system_error"), 1, + messageTerm); + SP_raise_exception(t1); /* raise the exception */ +} + +void raisePrologDomainExeption(double target, int argNumber, const char *expectation, const char *predicateName) +{ + SP_term_ref culprit=SP_new_term_ref(); + SP_term_ref argno=SP_new_term_ref(); + SP_term_ref expdomain=SP_new_term_ref(); + SP_term_ref t1=SP_new_term_ref(); + + SP_put_float(culprit, target); + SP_put_integer(argno, argNumber); + SP_put_string(expdomain, expectation); + SP_cons_functor(t1, SP_atom_from_string(predicateName), 1, culprit); + SP_cons_functor(t1, SP_atom_from_string("domain_error"), 4, + t1, argno, expdomain, culprit); + SP_raise_exception(t1); /* raise the exception */ +} + +void raisePrologDomainExeption(SP_integer target, int argNumber, const char *expectation, const char *predicateName) +{ + SP_term_ref culprit=SP_new_term_ref(); + SP_term_ref argno=SP_new_term_ref(); + SP_term_ref expdomain=SP_new_term_ref(); + SP_term_ref t1=SP_new_term_ref(); + + SP_put_integer(culprit, target); + SP_put_integer(argno, argNumber); + SP_put_string(expdomain, expectation); + SP_cons_functor(t1, SP_atom_from_string(predicateName), 1, culprit); + SP_cons_functor(t1, SP_atom_from_string("domain_error"), 4, + t1, argno, expdomain, culprit); + SP_raise_exception(t1); /* raise the exception */ +} + +void raisePrologDomainExeption(const char * target, int argNumber, const char *expectation, const char *predicateName) +{ + SP_term_ref culprit=SP_new_term_ref(); + SP_term_ref argno=SP_new_term_ref(); + SP_term_ref expdomain=SP_new_term_ref(); + SP_term_ref t1=SP_new_term_ref(); + + SP_put_string(culprit, target); + SP_put_integer(argno, argNumber); + SP_put_string(expdomain, expectation); + SP_cons_functor(t1, SP_atom_from_string(predicateName), 1, culprit); + SP_cons_functor(t1, SP_atom_from_string("domain_error"), 4, + t1, argno, expdomain, culprit); + SP_raise_exception(t1); /* raise the exception */ +} diff --git a/src/helper_files/helper.hpp b/src/helper_files/helper.hpp index 234cbade9c08af1ec5d96718e69b87be8dec4133..2900ca5d2618a4e24b44195b7ae0c0d6bfbe99f1 100644 --- a/src/helper_files/helper.hpp +++ b/src/helper_files/helper.hpp @@ -36,4 +36,15 @@ void returnVectorInformation(vec vector, float **vecArr, SP_integer *vecArrSize) void returnVectorInformation(Row< size_t > vector, float **vecArr, SP_integer *vecArrSize); + +// prolog exeption caller functions + +void raisePrologSystemExeption(const char *message); + +void raisePrologDomainExeption(double target, int argNumber, const char *expectation, const char *predicateName); + +void raisePrologDomainExeption(SP_integer target, int argNumber, const char *expectation, const char *predicateName); + +void raisePrologDomainExeption(const char * target, int argNumber, const char *expectation, const char *predicateName); + #endif diff --git a/src/helper_files/helper.pl b/src/helper_files/helper.pl index 2badf32c88f7aa2101a577341d602e3f391f575f..dd56e21daadbf65edb64865902cd5a0a1f7eea1b 100644 --- a/src/helper_files/helper.pl +++ b/src/helper_files/helper.pl @@ -1,4 +1,11 @@ -:- module(helper, [convert_list_to_float_array/3, convert_list_to_float_array/2, convert_float_array_to_list/3, len/2, convert_record_to_arr/2, take_csv_row/1, convert_float_array_to_2d_list/4]). +:- module(helper, [ convert_list_to_float_array/3, + convert_list_to_float_array/2, + convert_float_array_to_list/3, + len/2, + convert_record_to_arr/2, + take_csv_row/3, + take_csv_row/4, + convert_float_array_to_2d_list/4]). :- use_module(library(structs)). :- use_module(library(csv)). @@ -40,7 +47,7 @@ convert_float_array_to_list(Mem, Index, Count, [Val|Rest]) :- %% takes library(struct) array and fills a 2D [[a], [b]] with the content of the array from 0 to to given Index convert_float_array_to_2d_list(Mem, ColNum, RowNum, Out) :- - convert_float_array_to_2d_list(Mem, ColNum, RowNum, 0, Out). + convert_float_array_to_2d_list(Mem, RowNum, ColNum, 0, Out). convert_float_array_to_2d_list(_, _, RowNum, RowNum, []) :- !. @@ -71,9 +78,14 @@ convert_record_to_arr([float(Num,_)|Tail], [Num|Rest]) :- convert_record_to_arr([string(_)|Tail], Rest) :- convert_record_to_arr(Tail, Rest). - -take_csv_row(Out) :- - open('/home/afkjakhes/eclipse-workspace/Prolog mlpack Libary/iris.csv', read, A), - read_record(A, _), - read_record(A, Rec), - convert_record_to_arr(Rec, Out). \ No newline at end of file +take_csv_row(File, skipFirstRow, Count, H) :- + read_record(File, _), + take_csv_row(File, Count, H). +take_csv_row(_, 0, []) :- !. +take_csv_row(File, Count, H) :- + read_record(File, Rec), + convert_record_to_arr(Rec, Out), + NewCount is Count - 1, + append(Out, Rest, H), + take_csv_row(File, NewCount, Rest), + !. diff --git a/src/helper_files/helper_tests.pl b/src/helper_files/helper_tests.pl new file mode 100644 index 0000000000000000000000000000000000000000..6134382d51dc48788c88a0b2dfb09444ca1dda8b --- /dev/null +++ b/src/helper_files/helper_tests.pl @@ -0,0 +1,21 @@ + +:- use_module(library(plunit)). + + +:- use_module(library(csv)). +:- use_module('helper.pl'). + + +:- begin_tests(b). + +test(matrix) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow, 2, Records), + print(Records), + print('\n'), + convert_list_to_float_array(Records, 4, array(Xsize, Xrownum, X)), + convert_float_array_to_2d_list(X, Xrownum, 2, ProbsList), + print(ProbsList), + print('\n'). + +:- end_tests(b). \ No newline at end of file