Prolog 葡萄酒系统序言

Prolog 葡萄酒系统序言,prolog,classification,Prolog,Classification,我的代码有问题。目前,我希望每一种葡萄酒都能按照一定的规则获得一分。我想在序言中查询菜肴、葡萄酒、分数([牛肉、鱼]、葡萄酒、分数)。目前,代码沿着所有的葡萄酒运行,并给他们一个点,但没有做任何事情。我需要添加一些列表,给葡萄酒一个分数,然后这个列表必须用于第二种成分。有人知道怎么做吗 wine_color_body(riesling, riesling, white, _ ). wine_color_body(sauvignon_blanc, sauvignon_blanc, white, l

我的代码有问题。目前,我希望每一种葡萄酒都能按照一定的规则获得一分。我想在序言中查询菜肴、葡萄酒、分数([牛肉、鱼]、葡萄酒、分数)。目前,代码沿着所有的葡萄酒运行,并给他们一个点,但没有做任何事情。我需要添加一些列表,给葡萄酒一个分数,然后这个列表必须用于第二种成分。有人知道怎么做吗

wine_color_body(riesling, riesling, white, _ ). wine_color_body(sauvignon_blanc, sauvignon_blanc, white, light). wine_color_body(viognier, viognier, white, light). wine_color_body(pinot_grigio, pinot_grigio, white, light). wine_color_body(pinot_blanc, pinot_blanc, white, _). wine_color_body(cabernet_sauvignon, cabernet_sauvignon, red, light). wine_color_body(malbec, malbec, red, light). wine_color_body(pinot_noir, pinot_noir, red, medium). wine_color_body(merlot, merlot, red, full). %vis 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(baars, Wine, 1) :- wine_color_body(Wine, viognier, white, _). dish_wine_score(baars, Wine, 1) :- wine_color_body(Wine, riesling, white, _). %vlees 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(kalfsvlees, Wine, 1) :- wine_color_body(Wine, _ , red, _). %saus dish_wine_score(rode_wijn_saus, Wine, 1) :- wine_color_body(Wine, _ , red, light). %groente dish_wine_score(courgette, Wine, 1) :- wine_color_body(Wine, merlot, _ , _ ). 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. higher_score(Dishes, Score1) :- dishes_wine_score(Dishes, _, Score2), Score2 > Score1. best_wine(Dishes, Wine, Score) :- dishes_wine_score(Dishes, Wine, Score), \+higher_score(Dishes, Score). 酒体颜色(雷司令、雷司令、白)。 酒体颜色(长相思、长相思、白色、浅色)。 酒体颜色(维奥涅、维奥涅、白色、浅色)。 酒体颜色(灰比诺、灰比诺、白、淡)。 酒体颜色(白比诺、白比诺、白比诺)。 酒体颜色(赤霞珠、赤霞珠、红色、浅色)。 酒体颜色(马尔贝克、马尔贝克、红色、浅色)。 酒体颜色(黑比诺、黑比诺、红色、中等)。 酒体颜色(梅洛、梅洛、红色、饱满)。 %可见光 菜、酒、分数(鱼、酒、1):- 酒体颜色(酒、白、白)。 菜、酒、分数(鱼、酒、0):- 酒体颜色(酒、红、红)。 菜、酒、分数(巴耳、酒、1):- 酒体颜色(葡萄酒、维奥涅、白葡萄酒等)。 菜、酒、分数(巴耳、酒、1):- 酒体颜色(葡萄酒、雷司令、白葡萄酒等)。 %弗利斯 菜肴、葡萄酒、评分(牛肉、葡萄酒、1分):- 酒体颜色(酒、红、红)。 菜肴、葡萄酒评分(牛肉、葡萄酒,0分):- 酒体颜色(酒、白、白)。 菜、酒、分数(卡尔夫斯利、酒、1):- 酒体颜色(酒、红、红)。 %索斯 菜肴、葡萄酒、分数(罗得、维苏、葡萄酒、1分):- 酒体颜色(酒、红、淡)。 %格罗恩特 菜肴、葡萄酒、分数(小胡瓜、葡萄酒、1):- 葡萄酒、颜色、酒体(葡萄酒、梅洛、、)。 菜肴、葡萄酒、分数([],葡萄酒,0)。 菜、酒、分数([菜、酒、分数]):- 菜肴、葡萄酒、计分(菜肴、葡萄酒、计分), 菜肴、葡萄酒、分数(菜肴、葡萄酒、RestScore), 分数是DishScore+RestScore。 得分较高(菜品,得分1):- 菜品、葡萄酒、分数(菜品、分数2), 得分2>得分1。 最佳葡萄酒(菜肴、葡萄酒、分数):- 菜、酒、分数(菜、酒、分数), \+更高的分数(菜品、分数)。 也许是这样

我已经简化了“葡萄酒、颜色、酒体/3”的事实,不再重复葡萄酒的名称。看起来没必要。
小胡瓜
梅洛
之间的匹配可以通过以下方法完成:

dish_wine_score(courgette, merlot, 1).
因此:

wine_color_body(riesling           , white , _ ).
wine_color_body(sauvignon_blanc    , white , light).
wine_color_body(viognier           , white , light).
wine_color_body(pinot_grigio       , white , light).
wine_color_body(pinot_blanc        , white , _).
wine_color_body(cabernet_sauvignon , red   , light).
wine_color_body(malbec             , red   , light).
wine_color_body(pinot_noir         , red   , medium).
wine_color_body(merlot             , red   , full).

%vis
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(baars, Wine, 1) :- wine_color_body(Wine, white, _).
dish_wine_score(baars, Wine, 1) :- wine_color_body(Wine, white, _).

%vlees
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(kalfsvlees, Wine, 1) :- wine_color_body(Wine, red, _).

%saus
dish_wine_score(rode_wijn_saus, Wine, 1) :-  wine_color_body(Wine, red, light).

%groente
dish_wine_score(courgette, merlot, 1).

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.

best_wine(Dishes, Wine, Score) :-
   collect(Dishes,PairsSorted),
   format("All Scores: ~q\n",[PairsSorted]),
   PairsSorted = [Wine-Score|_].
   
collect(Dishes,PairsSorted) :-   
   setof(Wine-Score,        
        (wine_color_body(Wine,_,_),dishes_wine_score(Dishes,Wine,Score)),
        Pairs),
   sort(1,@>=,Pairs,PairsSorted). 
因此:

也许是这样

我已经简化了“葡萄酒、颜色、酒体/3”的事实,不再重复葡萄酒的名称。看起来没必要。
小胡瓜
梅洛
之间的匹配可以通过以下方法完成:

dish_wine_score(courgette, merlot, 1).
因此:

wine_color_body(riesling           , white , _ ).
wine_color_body(sauvignon_blanc    , white , light).
wine_color_body(viognier           , white , light).
wine_color_body(pinot_grigio       , white , light).
wine_color_body(pinot_blanc        , white , _).
wine_color_body(cabernet_sauvignon , red   , light).
wine_color_body(malbec             , red   , light).
wine_color_body(pinot_noir         , red   , medium).
wine_color_body(merlot             , red   , full).

%vis
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(baars, Wine, 1) :- wine_color_body(Wine, white, _).
dish_wine_score(baars, Wine, 1) :- wine_color_body(Wine, white, _).

%vlees
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(kalfsvlees, Wine, 1) :- wine_color_body(Wine, red, _).

%saus
dish_wine_score(rode_wijn_saus, Wine, 1) :-  wine_color_body(Wine, red, light).

%groente
dish_wine_score(courgette, merlot, 1).

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.

best_wine(Dishes, Wine, Score) :-
   collect(Dishes,PairsSorted),
   format("All Scores: ~q\n",[PairsSorted]),
   PairsSorted = [Wine-Score|_].
   
collect(Dishes,PairsSorted) :-   
   setof(Wine-Score,        
        (wine_color_body(Wine,_,_),dishes_wine_score(Dishes,Wine,Score)),
        Pairs),
   sort(1,@>=,Pairs,PairsSorted). 
因此:


但我想你真的想把所有的葡萄酒都列出来吗?但我想你真的想把所有的葡萄酒都列出来吗?