0

我正在开发一个关于寻找动物的序言游戏。用户在他/她的脑海中保留一只动物,回答游戏中的问题,人工智能正在尝试寻找动物。

我的问题是关于分离动物类:

mammal    :- verify(gives_milk), !.
bird      :- verify(has_feathers), !.

我想将这两个类彼此分开。如果动物是哺乳动物,AI 不会询问“has_feathers”。

4

1 回答 1

1

我不太了解您将如何查询动物是否是 a mammal:您将需要动物的参数。所以谓词看起来像:

mammal(A) :-
    verify(A,gives_milk),
    !.

显然有某种数据库,如:

verify(cow,gives_milk).
verify(crow,has_feathers).
% ...

接下来,您可以使用 Prolog 中的否定\+来确定动物没有羽毛:

mammal(A) :-
    verify(A,gives_milk),
    \+ verify(A,has_feathers),
    !.

不要重复使用bird,反之亦然,因为那样会创建一个无限循环(除非您允许制表支持)。

更具声明性的风格

一种更具声明性的风格可能是指定哪些方面应该持有,哪些方面不能持有。就像是:

verifies(A,Pos,Neg) :-
    verify_pos(A,Pos),
    verify_neg(A,Neg).

verify_pos(_,[]).
verify_pos(A,[H|T]) :-
    verify(A,H),
    verify_pos(A,T).

verify_neg(_,[]).
verify_neg(A,[H|T]) :-
    \+ verify(A,H),
    verify_neg(A,T).

现在您可以举例说明:

mammal(A) :-
    verifies(A,[gives_milk],[has_feathers,produces_eggs]).

等等

于 2016-01-13T09:12:30.070 回答