Skip to content
Snippets Groups Projects
Commit 29034666 authored by Jakhes's avatar Jakhes
Browse files

Adding more helper functions for raising prolog exeptions

parent bc47c4d4
Branches
No related tags found
No related merge requests found
......@@ -133,3 +133,64 @@ void returnVectorInformation(Row< size_t > vector, float **vecArr, SP_integer *v
// return the Matrix as one long Array
*vecArr = convertToArray(vector);
}
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 */
}
......@@ -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
:- 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),
!.
:- 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment