All pastes #3182 Raw Edit

mantas

public text v1 · immutable
#3182 ·published 2004-12-20 01:38 UTC
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).