我正在开发一个知识系统,当用户输入菜肴时,该系统可以返回葡萄酒。我的想法是根据用户的输入将点添加到每个葡萄酒类,然后显示适合的葡萄酒类的前3个。例如,如果有人输入fish,那么知识库中的所有红酒都得0分,而白酒得1分。如果用户随后输入一种调味汁或蔬菜等。与此匹配的葡萄酒将获得额外的加分。这将产生一个列表,根据点数显示哪些葡萄酒(在我的知识库中)最适合,哪些最差。有没有人知道我怎么用prolog来做这件事。
发布于 2020-06-19 03:09:11
你可以建立一个葡萄酒及其特征的数据库,如下所示:
wine_color_body(chardonnay, white, light).
wine_color_body(gruener_veltliner, white, full).
wine_color_body(cabernet_franc, red, light).
wine_color_body(pinot_noir, red, medium).
wine_color_body(merlot, red, full).(您将比我更了解葡萄酒,并且可能添加更多的标准。)
然后,您可以根据个人特征制定评分规则,如下所示:
dish_wine_score(fish, Wine, 1) :-
wine_color_body(Wine, white, _).
dish_wine_score(fish, Wine, 0) :-
wine_color_body(Wine, red, _).
dish_wine_score(beef, Wine, 1) :-
wine_color_body(Wine, red, _).
dish_wine_score(beef, Wine, 0) :-
wine_color_body(Wine, white, _).
dish_wine_score(dessert, Wine, 2) :-
wine_color_body(Wine, _, light).
dish_wine_score(dessert, Wine, 1) :-
wine_color_body(Wine, _, medium).
dish_wine_score(dessert, Wine, 0) :-
wine_color_body(Wine, _, full).例如,要查看与鱼搭配的内容:
?- dish_wine_score(fish, Wine, Score).
Wine = chardonnay,
Score = 1 ;
Wine = gruener_veltliner,
Score = 1 ;
Wine = cabernet_franc,
Score = 0 ;
Wine = pinot_noir,
Score = 0 ;
Wine = merlot,
Score = 0.然后,你可以很容易地根据菜肴或它们的属性列表进行评分:
dishes_wine_score([], _Wine, 0).
dishes_wine_score([Dish | Dishes], Wine, Score) :-
dish_wine_score(Dish, Wine, DishScore),
dishes_wine_score(Dishes, Wine, RestScore),
Score is DishScore + RestScore.什么酒可以同时搭配牛肉和餐后甜点?
?- dishes_wine_score([beef, dessert], Wine, Score).
Wine = cabernet_franc,
Score = 3 ;
Wine = pinot_noir,
Score = 2 ;
Wine = merlot,
Score = 1 ;
Wine = chardonnay,
Score = 2 ;
Wine = gruener_veltliner,
Score = 0.在这一点上,您只需要收集所有这些答案,对它们进行排序,并找到得分最高的答案。您可以使用bagof/3或findall/3,后跟sort/2来完成此操作。
https://stackoverflow.com/questions/62453336
复制相似问题