通过给 类 点数进行 Prolog 分类
Prolog classification by giving points to classes
我正在开发一个知识系统,当用户输入一道菜时,它可以 return 一杯酒。我的想法是根据用户的输入为每种葡萄酒 class 加分,然后显示前 3 名最合适的葡萄酒 classes。因此,例如,如果有人输入鱼,那么知识库中的所有红葡萄酒都会得到零分,而白葡萄酒会得到一分。如果用户随后输入一种酱汁或蔬菜等。与此相匹配的葡萄酒会得到加分。然后,这将生成一个列表,根据要点显示哪些葡萄酒(在我的知识库中)最适合,哪些最不适合。有谁知道我如何在序言中做到这一点。
您可以像这样建立葡萄酒及其特征的数据库:
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
.
我正在开发一个知识系统,当用户输入一道菜时,它可以 return 一杯酒。我的想法是根据用户的输入为每种葡萄酒 class 加分,然后显示前 3 名最合适的葡萄酒 classes。因此,例如,如果有人输入鱼,那么知识库中的所有红葡萄酒都会得到零分,而白葡萄酒会得到一分。如果用户随后输入一种酱汁或蔬菜等。与此相匹配的葡萄酒会得到加分。然后,这将生成一个列表,根据要点显示哪些葡萄酒(在我的知识库中)最适合,哪些最不适合。有谁知道我如何在序言中做到这一点。
您可以像这样建立葡萄酒及其特征的数据库:
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
.