sumPoly(P1, [], P1). sumPoly([], P2, P2). sumPoly([H1 | P1], [H2 | P2], [H3 | P3]) :- sumPoly(P1, P2, P3), H3 is H1 + H2. sumDense(P1, [], P1). sumDense([], P2, P2). sumDense([[C1, E1] | P1], [[C2, E2] | P2], [[C3, E3] | P3]) :- E1 < E2, C3 = C1, E3 = E1, sumDense(P1, [[C2, E2] | P2], P3). sumDense([[C1, E1] | P1], [[C2, E2] | P2], [[C3, E3] | P3]) :- E1 > E2, C3 = C2, E3 = E2, sumDense([[C1, E1] | P1] , P2, P3). sumDense([[C1, E1] | P1], [[C2, E2] | P2], [[C3, E3] | P3]) :- E1 = E2, C3 is C1 + C2, E1 = E3, sumDense(P1, P2, P3). wineList([[1996, chardonnay, gallo, 6.95], [1997, pinotnoir, gallo, 5.95], [1995, burgundy, ripple, 3.95], [1996, cabernet, gallo, 4.95], [1997, pinotnoir, maddog, 3.95], [1997, chardonnay, nighttrain, 4.99], [1996, bordeaux, ripple, 2.99], [1997, bordeaux, ripple, 2.95], [1997, chardonnay, gallo, 5.95], [1994, chardonnay, gallo, 16.99], [1997, pinotnoir, oldtavern, 2.95], [1996, burgundy, maddog, 3.95]]). vintage(_, [], []). vintage(Y, [[Y, V, W, P] | W1], [[Y, V, W, P] | W2]) :- vintage(Y, W1, W2). vintage(Y, [_ | W1], W2) :- vintage(Y, W1, W2). wineType(_, _, [], []). wineType(V, W, [[Y, V, W, P] | W1], [[Y, V, W, P] | W2]) :- wineType(V, W, W1, W2). wineType(V, W, [_ | W1], W2) :- wineType(V, W, W1, W2). minPrice([[_, _, _, P]], P). minPrice([[_, _, _, P] | W], P) :- minPrice(W, P1), P =< P1. minPrice([[_, _, _, P] | W], P1) :- minPrice(W, P1), P1 =< P. price([_, _, _, P], P). minPriceWine([W], W). minPriceWine([W | L], W) :- minPriceWine(L, W1), price(W, P), price(W1, P1), P =< P1. minPriceWine([W | L], W1) :- minPriceWine(L, W1), price(W, P), price(W1, P1), P1 =< P.