Застрял в проблеме Пролог. Я знаю ответ (потому что сначала я сделал это на бумаге), но я не могу понять, как заставить Пролога придумать ответ.
Проблема:
Билл ест перекусывать каждый вечер, каждый вечер есть разные фрукты и орехи. Из приведенных ниже утверждений определите, что Билл ел на каждую неделю на прошлой неделе.
а) Яблоко съели позже на неделе, чем мужчина go.
б) банан ели позже на неделе, чем миндаль и арахис, но раньше на неделе, чем грушу.
c) Кешью ели раньше на неделе, чем и банан, и абрикос, но позже на неделе, чем арахис.
d) орехи-пеканы не ели на вечер после миндаля.
e) Билл ел грецкие орехи одну ночь.
Обратите внимание, что проблема около 5 будней (с понедельника по пятницу), и упоминает 5 видов фруктов и 5 видов орехов. Ваша программа должна решить проблему и распечатать решение, которое будет состоять из 5 троек, таких как (понедельник, яблоко, орехи пекан), ... (пятница, человек go, грецкие орехи).
Понятно это не правильные ответы, а просто значения, показывающие, как будет выглядеть решение.
Код до сих пор:
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).