首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog分类

Prolog分类
EN

Stack Overflow用户
提问于 2020-06-18 23:15:07
回答 1查看 77关注 0票数 2

我正在开发一个知识系统,当用户输入菜肴时,该系统可以返回葡萄酒。我的想法是根据用户的输入将点添加到每个葡萄酒类,然后显示适合的葡萄酒类的前3个。例如,如果有人输入fish,那么知识库中的所有红酒都得0分,而白酒得1分。如果用户随后输入一种调味汁或蔬菜等。与此匹配的葡萄酒将获得额外的加分。这将产生一个列表,根据点数显示哪些葡萄酒(在我的知识库中)最适合,哪些最差。有没有人知道我怎么用prolog来做这件事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-19 03:09:11

你可以建立一个葡萄酒及其特征的数据库,如下所示:

代码语言:javascript
复制
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).

(您将比我更了解葡萄酒,并且可能添加更多的标准。)

然后,您可以根据个人特征制定评分规则,如下所示:

代码语言:javascript
复制
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).

例如,要查看与鱼搭配的内容:

代码语言:javascript
复制
?- 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.

然后,你可以很容易地根据菜肴或它们的属性列表进行评分:

代码语言:javascript
复制
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.

什么酒可以同时搭配牛肉和餐后甜点?

代码语言:javascript
复制
?- 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/3findall/3,后跟sort/2来完成此操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62453336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档