陷入Prolog问题。我知道答案(因为我首先是在纸上做的),但我不知道如何让Prolog提出答案。
问题:
比尔每晚都吃零食,水果和水果不同每天晚上坚果。从下面的陈述中,找出比尔的目的上周每个晚上的零食。
a)苹果在一周中的食用时间比芒果晚。
b)香蕉在一周中的食用时间比杏仁和花生,但比梨早。
c)腰果在一周中的食用时间早于香蕉和杏,但比花生晚。
d)杏仁之后的晚上没有吃山核桃。
e)比尔一晚上吃了核桃。
请注意,问题大约在5个工作日(星期一至星期五),并提到了5种水果和5种坚果。您的程序应该解决问题并打印出解决方案,这将是一组5三元组,例如(星期一,苹果,山核桃),...(星期五,芒果,核桃)。
显然,这些不是正确的答案,而只是显示的值您的解决方案将是什么样子。
到目前为止的代码:
before_in_week(X, Y, Days) :-
nth1(Xi, Days, X),
nth1(Yi, Days, Y),
Xi < Yi.
print_solve([Head|Tail]) :-
write(Head),
nl,
print_solve(Tail).
solve(A) :-
% all triples
A = [[day1, fruit1, nut1],
[day2, fruit2, nut2],
[day3, fruit3, nut3],
[day4, fruit4, nut4],
[day5, fruit5, nut5]],
Days = [monday, tuesday, wednesday, thursday, friday],
Days = [day1, day2, day3, day4, day5],
Fruits = [apple,banana,pear,mango,apricot],
permutation(Fruits, [fruit1, fruit2, fruit3, fruit4, fruit5]),
Nuts = [almonds,pecans,cashews,peanuts,walnuts],
permutation(Nuts, [nut1, nut2, nut3, nut4, nut5]),
% clue 1 - mango before apple
fruit5 \= mango,
member([C1,mango,_], A),
member([C2,apple,_], A), before_in_week(C1,C2,Days),
% clue 2 - banana after almonds and peanuts, but before pear
fruit5 \= banana,
member([C1,banana,_], A),
member([C2,pear,_], A), before_in_week(C1,C2,Days),
member([C3,_,almonds], A), before_in_week(C3,C1,Days),
member([C4,_,peanuts], A), before_in_week(C4,C1,Days),
% clue 3 - cashews before banana and apricot, but after peanuts
nut5 \= peanuts,
member([C1,_,cashews], A),
member([C2,_,peanuts], A), before_in_week(C1,C2,Days),
member([C3,banana,_], A), before_in_week(C3,C1,Days),
member([C4,apricot,_], A), before_in_week(C4,C1,Days),
% clue 4 - pecans not night after almonds
nut5 \= almonds,
% clue 5 - ate walnuts one night
print_solve(A).
陷入Prolog问题。我知道答案(因为我首先在纸上做过),但是我不知道如何让Prolog提出答案。问题:比尔每晚都吃零食,有...
您最大的问题是您正在使用原子(fruit4
),但应使用变量(Fruit4
)。在开始时注意大写。