/* from Warren's paper in Machine Intelligence 10 */ drinks(david, beer). drinks(david, milk). drinks(jane, water). drinks(ben, milk). size([], 0). size([X|L], N1) :- size(L, N), N1 is N + 1. drunk_by(D, N) :- setof(X, drinks(X, D), S), size(S, N).