Я пытаюсь создать запрос average(X, A)
, который возвращает истину, если X существует в базе данных пролога и если A - это средняя цена товаров в магазине
Пример вывода
?- average(best_smoothies,A).
A = 2.66667
No
База данных Prolog
store(best_smoothies, [alan,john,mary],
[ smoothie(berry, [orange, blueberry, strawberry], 2),
smoothie(tropical, [orange, banana, mango, guava], 3),
smoothie(blue, [banana, blueberry], 3) ]).
store(all_smoothies, [keith,mary],
[ smoothie(pinacolada, [orange, pineapple, coconut], 2),
smoothie(green, [orange, banana, kiwi], 5),
smoothie(purple, [orange, blueberry, strawberry], 2),
smoothie(smooth, [orange, banana, mango],1) ]).
store(smoothies_galore, [heath,john,michelle],
[ smoothie(combo1, [strawberry, orange, banana], 2),
smoothie(combo2, [banana, orange], 5),
smoothie(combo3, [orange, peach, banana], 2),
smoothie(combo4, [guava, mango, papaya, orange],1),
smoothie(combo5, [grapefruit, banana, pear],1) ]).
Моя попытка:
numSmoothie([_|T],X) :- numSmoothie(T,A), X is A+1.
numSmoothie([], 0).
priceSmoothie([_|T],X) :- priceSmoothie(T,A), X is A+1.
priceSmoothie([], 0).
average(X, A) :- store(X,_,S),
numSmoothie(S, SmoothieCount),
writeln("Number of smoothies is: "),
writeln(SmoothieCount),
store(_,_,[smoothie(_,_,C)]),
priceSmoothie(C, SmoothiePrice),
writeln("Total price of smoothies is: "),
writeln(SmoothiePrice),
A is SmoothiePrice / SmoothieCount.
Я могу получить количество элементов в списке, просто посчитав на S. Однако я могу Похоже, что у меня нет доступа к элементам списка (также известным как цена) и суммировать их в целом.
Вывод, который я получаю
?- average(smoothies_galore, A).
Number of smoothies is:
5
false.
На основе на выходе ясно, что я не обращаюсь к элементу цены магазина. Почему store(_,_,[smoothie(_,_,C)])
недействительно для доступа к ценам на товары?
Буду признателен за любую помощь по этому поводу. Большое спасибо!