view 3-Prolog/day1-food.pl @ 103:98be775c533c default tip

An odd "non-determinism" example from StackOverflow It is clever, but doesn't make much sense as to how it gets its results
author IBBoard <dev@ibboard.co.uk>
date Sun, 14 Jul 2019 13:44:13 +0100
parents cbaa3546f3f8
children
line wrap: on
line source

% Define some foods and "flavours".
% Note that this is Americanised, so some of these definitions are generous!
food_type(velveeta, cheese).
food_type(ritz, cracker).
food_type(spam, meat).
food_type(sausage, meat).
food_type(jolt, soda).
food_type(twinkie, dessert).

flavour(sweet, dessert).
flavour(savoury, meat).
flavour(savoury, cheese).
flavour(sweet, soda).

food_flavour(X, Y) :- food_type(X, Z), flavour(Y, Z).
% Note: flavour(sweet, What) will return 'yes' and a closed set of answers because it is just all of the facts
% but "food_flavour(What, meat)" will return answers and then say 'no', because it hasn't been given a flavour()
% fact for "ritz"/"cracker".
% This doesn't explain why "food(What, meat)" returns "no" after spam and sausage, though. Maybe because there's
% flavour(savoury, meat) so Prolog knows savoury is associated with meat but doesn't know whether it is in a food()
% fact without more processing?