annotate 3-Prolog/day1-food.pl @ 52:cbaa3546f3f8

Add extra thought on why you sometimes get "no" and sometimes "yes" after variable lists
author IBBoard <dev@ibboard.co.uk>
date Tue, 26 Sep 2017 19:42:02 +0100
parents 178b18b4f9ba
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
51
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 % Define some foods and "flavours".
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2 % Note that this is Americanised, so some of these definitions are generous!
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
3 food_type(velveeta, cheese).
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4 food_type(ritz, cracker).
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 food_type(spam, meat).
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 food_type(sausage, meat).
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 food_type(jolt, soda).
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8 food_type(twinkie, dessert).
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 flavour(sweet, dessert).
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 flavour(savoury, meat).
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 flavour(savoury, cheese).
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 flavour(sweet, soda).
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 food_flavour(X, Y) :- food_type(X, Z), flavour(Y, Z).
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16 % Note: flavour(sweet, What) will return 'yes' and a closed set of answers because it is just all of the facts
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 % but "food_flavour(What, meat)" will return answers and then say 'no', because it hasn't been given a flavour()
178b18b4f9ba Start experimenting with Prolog
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 % fact for "ritz"/"cracker".
52
cbaa3546f3f8 Add extra thought on why you sometimes get "no" and sometimes "yes" after variable lists
IBBoard <dev@ibboard.co.uk>
parents: 51
diff changeset
19 % This doesn't explain why "food(What, meat)" returns "no" after spam and sausage, though. Maybe because there's
cbaa3546f3f8 Add extra thought on why you sometimes get "no" and sometimes "yes" after variable lists
IBBoard <dev@ibboard.co.uk>
parents: 51
diff changeset
20 % flavour(savoury, meat) so Prolog knows savoury is associated with meat but doesn't know whether it is in a food()
cbaa3546f3f8 Add extra thought on why you sometimes get "no" and sometimes "yes" after variable lists
IBBoard <dev@ibboard.co.uk>
parents: 51
diff changeset
21 % fact without more processing?