H1 + H2 = H3
, then write it as H3 is H1 + H2
.
[[2,1], [3,4]]
. You may assume that the
terms are in order of increasing exponent.
vintage(Y, L1, L2)
)
wineType(W, V, L1, L2)
)
minPrice(L, P)
)
minPriceWine(L, P)
)
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]]).Now when I want to find the minimum price wine in the list, I make the following query:
7 ?- wineList(L), minPrice(L, P).The meaning of the query is, find a list L and value P, such that L statisfies the wineList predicate, and L and P satisfy the minPrice relation. Since the only list which satisfies the wineList predicate is the given list, this has the effect of assigning the list to L. Yes, this does seem like a bit of a hack.
Here is the script:
Script started on Mon Nov 03 13:07:33 1997 orcas% prolog Welcome to SWI-Prolog (Version 2.9.5) Copyright (c) 1993-1997 University of Amsterdam. All rights reserved. For help, use ?- help(Topic). or ?- apropos(Word). 1 ?- [assign]. assign compiled, 0.02 sec, 11,800 bytes. Yes 2 ?- sumPoly([1,2,3], [1, -2, 3, -4, 5], L). L = [2, 0, 6, -4, 5] Yes 3 ?- sumDense([[1, 2], [3, 5]], [[1, 1], [2, 2], [3, 3]], L). L = [[1, 1], [3, 2], [3, 3], [3, 5]] Yes 4 ?- wineList(L). L = [[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]] Yes 5 ?- wineList(L), vintage(1996, L, L1). L = [[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]] L1 = [[1996, chardonnay, gallo, 6.95], [1996, cabernet, gallo, 4.95], [1996, bordeaux, ripple, 2.99], [1996, burgundy, maddog, 3.95]] Yes 6 ?- wineList(L), wineType(chardonnay, gallo, L, L1). L = [[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]] L1 = [[1996, chardonnay, gallo, 6.95], [1997, chardonnay, gallo, 5.95], [1994, chardonnay, gallo, 16.99]] Yes 7 ?- wineList(L), minPrice(L, P). L = [[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]] P = 2.95 Yes 8 ?- wineList(L), minPriceWine(L, W). L = [[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]] W = [1997, bordeaux, ripple, 2.95] Yes 9 ?- halt. orcas% ^D script done on Mon Nov 03 16:10:44 1997