【发布时间】:2016-06-28 15:50:03
【问题描述】:
我是 Prolog 的新手,我有兴趣将以下单词问题转换为 (SWI) Prolog:
有 4 个孩子:Abe、Dan、Mary 和 Sue。他们的年龄,排名不分先后,分别是 3、5、6 和 8 岁。Abe 比 Dan 大。苏比玛丽年轻。苏的年龄是丹的年龄加上 3 岁。 Mary 比 Abe 大。
到目前为止,我想出了
child(X) :-
member(X, [3,5,6,8]).
solution(Abe, Dan, Mary, Sue) :-
child(Abe),
child(Dan),
child(Mary),
child(Sue),
Abe > Dan,
Sue < Mary,
Sue == Dan+3,
Mary > Abe,
Abe \== Dan,
Abe \== Mary,
Abe \== Sue,
Dan \== Mary,
Dan \== Sue,
Mary \== Sue.
但是运行查询
?- solution(Abe, Dan, Mary, Sue)
我刚收到false。作为一个附带问题,Prolog 会执行蛮力搜索来寻找解决方案,还是有一些机器可以比 O(n!) 更好地解决这个(某种)问题?
我想要的结果是Abe = 5, Dan = 3, Mary = 9, Sue = 6。
【问题讨论】:
-
你必须写 Sue =:= Dan+3 而不是 Sue == Dan+3
-
Sue == Dan+3不会执行算术运算。为此,您需要Sue =:= Dan+3。 -
好的,那么大问题实例在哪里呢?我很想见到他们!