我正在开发一个关于寻找动物的prolog游戏。用户将一只动物保存在脑海中,回答游戏中的问题,AI正在试图找到这只动物。
我的问题是要把动物分类:
mammal :- verify(gives_milk), !.
bird :- verify(has_feathers), !.
我想把这两门课分开。如果动物是哺乳动物,人工智能就不会问"has_feathers“。
发布于 2016-01-13 09:12:30
我不太明白您将如何质疑动物是否是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]).
等。
https://stackoverflow.com/questions/34758304
复制相似问题