Advertisement
Guest User

Prolog extra task

a guest
Apr 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.12 KB | None | 0 0
  1. print_expression([]).
  2. print_expression([A|B]) :-
  3.   write(A),
  4.   print_expression(B).
  5.  
  6. num_length(N, R) :-
  7.     ( N >= 1,N < 10 ) ->  R is 1;
  8.     ( N >= 10,N < 100 ) ->  R is 2;
  9.     ( N >= 100,N < 1000 ) ->  R is 3.
  10.  
  11. solve(Digit, Total, CurNum, SignCount, Expr, A, B, Goal) :-
  12.     BA is B - A,
  13.     ( BA > 50 ) ->  (   B2 is div(B-A, 2)+A, Goal1 is div(Goal, 2), Goal2 is Goal - Goal1, D2 is B2 + 1,
  14.                     solve(Digit, 0, CurNum, 0, [], A, B2, Goal1),
  15.                     solve(D2, 0, B2, 0, [], B2, B, Goal2));(  
  16.     Digit >= A, Digit =< B,D1 is Digit+1,
  17.     number_string(CurNum, Str),
  18.     num_length(Digit, P),    
  19.     (  
  20.         T1 is Total + CurNum, CurNum1 is Digit, C1 is SignCount+1,  append(Expr, ["+", Str], Expr1);
  21.         T1 is Total - CurNum, CurNum1 is Digit, C1 is SignCount+1, append(Expr, ["-", Str], Expr1);    
  22.         CurNum1 is CurNum * (10 ** P) + Digit, T1 is Total, C1 is SignCount,  Expr1 = Expr
  23.     ),    
  24.     (
  25.         (  
  26.                ( Digit == B,CurNum1 == B,T1 == Goal ) ->   print_expression(Expr1),write("="),writeln(Goal); false
  27.         );
  28.         solve(D1, T1, CurNum1, C1, Expr1, A, B, Goal)
  29.     )
  30.  ).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement