解决Prolog中有关时间限制的难题

问题描述 投票:1回答:1

陷入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提出答案。问题:比尔每晚都吃零食,有...

prolog swi-prolog zebra-puzzle
1个回答
0
投票

您最大的问题是您正在使用原子(fruit4),但应使用变量(Fruit4)。在开始时注意大写。

© www.soinside.com 2019 - 2024. All rights reserved.