Prolog 成员谓词可能性规则

Prolog member predicate possibilities rule

一份高级披萨恰好包含 40 盎司的配料。每个浇头可以有多个条目,只要总重量等于 40 盎司。

Pepperoni           4 
Sausage             10
Bacon               6
Onion               5
Mushroom            7

例如,披萨可以包含 1 个意大利辣香肠配料、2 个香肠配料、1 个配料 培根和 2 个洋葱配料:1*4 + 2*10 + 1*6 + 2*5 = 40(盎司)

一个披萨不能包含 7 种培根配料:7 * 6 = 42 > 40A 披萨不能只包含 3 种香肠配料:3*10 = 30 < 40

定义一个规则pizza(P, S, B, O, M)来找出每个浇头可以包含多少个 在披萨上,其中 P, S, B, O, and M 是意大利辣香肠、香肠的重量(以盎司为单位), 分别是培根、洋葱和蘑菇配料。

pizza(P,S,B,O,M):-
member(P,[0,1,2,3,4,5,6,7,8,9,10]),
member(S,[0,1,2,3,4]),
member(B,[0,1,2,3,4,5,6]),
member(O,[0,1,2,3,4,5,6,7,8]),
member(M,[0,1,2,3,4,5]),
S is 4*P + 10*S + 6*B + 5*O + 7*M,
S =:= 40.

我定义了以下规则,但它 returns 错误而不是可能的配料组合。

香肠重量和整个比萨的重量都使用了S