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