% 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).