rendered paste body
% split_lists(L,[H,H2|T2]) :-
% append(H,T,L),
% split_lists(T,[H2|T2]).
main(Number, List, ResultExpression) :- % gal List ir nereikia bus visalaik vienodas
generate_all_lists(List,Lists), % List gal [1,2,3,4,5,6,7,8,9]
proof_expression(Lists,Number,ResultExpression).
% proof_expression(Lists, Number, ResultExpresion) :-
% join_numbers(Lists, [], Templist),
% % here goes checking if expression is equal to number
% eval(Templist, Skaicius, ResultExpression),
% Skaicius \= Number,
% proof_expression(T, Number, ResultExpression).
proof_expression(Lists,Number,ResultExpression) :-
join_numbers(Lists,[],TempList),
eval(TempList,Number,ResultExpression).
split_list(L,[H,H2|T2]) :-
append(H,T,L), H\=[],
T\=[],
split_list(T,[H2|T2]) .
split_list(L,[L]).
% split_list([],[[],H2|T2]) :-
% split_list([],[H2|T2]) .
% split_list(L,[L]).
join_numbers([], Result, Result).
join_numbers([H | T], Start, Result) :-
% List = [H | T],
list_to_num(H, 0, X),
append(Start, [X], Result1),
join_numbers(T, Result1, Result).
generate_all_lists(List, Lists):-
split_list(List, Lists).
list_to_num([],N,N).
list_to_num([H|T],N0,N) :-
N1 is N0*10 + H,
list_to_num(T,N1,N).
printas([H|T]) :-
%L = [H | T],
write(H), write(' '),
%write(H),nl,
printas(T).
% eval([Number|Numbers],Value) :-
% eval_aux(Numbers,TailValue),
% eval_aux(Numbers,TailValue) :-
eval([Number|Numbers],Value, [Number|ResultExpression]) :-
eval_aux(Numbers,TailValue, ResultExpression),
Value = Number + TailValue.
% ;Value is Number - TailValue
% ).
% Value is 0 - Number + TailValue.
eval_aux([],Value, []) :-
Value is 0.
eval_aux([Number|Numbers],Value, [FirstSign,Number|ResultExpression]) :-
eval_aux(Numbers,TailValue,ResultExpression),
%Value is Number + TailValue.
( FirstSign = '+',
Value is TailValue + Number
; FirstSign = '-',
Value is TailValue - Number
).
% );
% ( Value is TailValue - Number
% ; Value is TailValue - Number
% )).
% eval_aux([Number|Numbers], Value):-
% eval_aux(Numbers,TailValue),
% %Value is Number - TailValue.
% ( Value is 0+ Number - TailValue
% ; Value is 0- Number - TailValue
% ).
%eval(List, Number, R) :-
% write('labas '), write(List- Number), nl,
% R is List,
% List \= Number,
% L2 is List - 1,
% eval(L2, Number, R).