【发布时间】:2018-04-01 23:14:50
【问题描述】:
我已经开始了 Prolog 课程,并且我得到了以下单词问题作为家庭作业。我很好理解算术问题,但我正在努力解决这个单词问题。我已经粘贴了我的解决方案,但它只在第一次测试而不是第二次测试中成功。你能帮我理解我做错了什么吗?在教科书中,“每个人”的问题经常使用 _ 表示它可能是任何人,所以我想知道这是否是我所缺少的?还是我的逻辑错了?谢谢!
编写一个谓词eats_all(Person, Food),根据谓词eats(Name,Item )。如果 Person 或 Food 为空,它将成功。 测试用例:
?- eats_all([john,tony],[pizza,burgers]).
true
?- eats_all([],[tacos]).
true
事实:
eats(melissa, pizza).
eats(melissa, pies).
eats(melissa, hotdogs).
eats(tony, burgers).
eats(tony, pizza).
eats(john, pizza).
eats(john, burgers).
到目前为止我的解决方案:
% the first person in Person list eats all foods in Food list (sub-problem);
first_person(_, []).
first_person(X, [Head_Food|Tail_Food]) :-
eats(X, Head_Food),
first_person(X, Tail_Food).
% main problem
eats_all([], _).
eats_all([Head_Person|Tail_Person], [Head_Food|Tail_Food]):-
eats(Head_Person, Head_Food),
eats_all(Tail_Person, Tail_Food).
【问题讨论】:
标签: prolog