diff --git a/Makefile b/Makefile
index d00cad509311850e2bd6d4e476b14b6b336c50ac..b242dbbb1662a2684f1f502b3625eb0d84cf28ac 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 splfr=/usr/local/sicstus4.7.1/bin/splfr
 main.so: main.pl main.cpp
-	$(splfr) -lmlpack -lstdc++ -cxx --struct main.pl main.cpp mlpack-3.4.2/src/mlpack/methods/bayesian_linear_regression/bayesian_linear_regression.cpp
+	$(splfr) -larmadillo -lmlpack -lstdc++ -cxx --struct main.pl main.cpp mlpack-3.4.2/src/mlpack/methods/bayesian_linear_regression/bayesian_linear_regression.cpp
 clean:
 	rm main.so
diff --git a/main.pl b/main.pl
index 805abd7ff97f46dbbfaf2caa07581fdac2e4a05e..99db83d97836f95605ad9f93c98b91a7866281b5 100644
--- a/main.pl
+++ b/main.pl
@@ -41,7 +41,7 @@ convert_list_to_float_array(Arr, array(Size,Mem)) :-
         new(float_array, Size, Mem),
         fill_float_array(Arr, 0, Mem).
 
-fill_float_array([], _, _).
+fill_float_array([], _, _):- !.
 fill_float_array([H|Tail], Index, Mem) :-
         put_contents(Mem, Index, H),
         New_index is Index + 1,
@@ -50,7 +50,7 @@ fill_float_array([H|Tail], Index, Mem) :-
 convert_float_array_to_list(Mem, Count, Out) :-
         convert_float_array_to_list(Mem, 0, Count, Out).
 
-convert_float_array_to_list(_, Count, Count, []).
+convert_float_array_to_list(_, Count, Count, []) :- !.
 
 convert_float_array_to_list(Mem, Index, Count, [Val|Rest]) :-
         NewIndex is Index + 1,
@@ -61,13 +61,13 @@ convert_float_array_to_list(Mem, Index, Count, [Val|Rest]) :-
 %% Funktions for reading the csv Files
 
 %% returns the length of a list
-len([], 0).
+len([], 0):- !.
 len([_|Tail], List_L) :-
         len(Tail, Tail_L),
         List_L is Tail_L + 1.
 
 %% take the elements in a csv record and put them in a list
-convert_record_to_arr([], []).
+convert_record_to_arr([], []):- !.
 convert_record_to_arr([float(Num,_)|Tail], [Num|Rest]) :-
         convert_record_to_arr(Tail, Rest).
 convert_record_to_arr([string(_)|Tail], Rest) :-