Search code examples
prologabsolute-value

Finding max, need all elements of list to be absolute value


This is my code, problem is, that last element of list is not in absolute value. Can anybody help?

maxlist( [X], X ).
maxlist( [X,Y|Rest], AbsMax ) :-
  abs( [X], AbsX ),
  maxlist( [Y|Rest], AbsMaxRest ),
  max( AbsX, AbsMaxRest, AbsMax ).


max( X, Y, X ) :- X >= Y.
max( X, Y, Y ) :- X <  Y.

abs( [X], Y ) :-
  X < 0 -> Y is -X ; Y = X.

For a list that goes like this:

maxlist( [-4110,-11,-885,-45,-154,-995] , X )

I get X = 4110, but for the last item

maxlist( [-995,-11,-885,-45,-154,-4110], X )j

I get X = 995, when I should get 4110.


Solution

  • maxlist([X],X).
    maxlist([X,Y|Rest],AbsMax) :- 
    abs(X,AbsX),
    abs(Y,AbsY), 
    maxlist([AbsY | Rest],AbsMaxRest),
    max(AbsX,AbsMaxRest,AbsMax).
    max(X,Y,X) :- X>= Y.
    max(X,Y,Y) :- X < Y.
    abs(X,Y) :- X < 0 -> Y is -X ; Y = X.
    

    This solves whole list of integer