Prolog分类
Prolog classification
我正在开发一款关于寻找动物的序幕游戏。用户在 his/her 脑海中保留一只动物,回答游戏中的问题,AI 将尝试找到该动物。
我的问题是关于分离动物 类:
mammal :- verify(gives_milk), !.
bird :- verify(has_feathers), !.
我想把这两个 类 分开。如果动物是哺乳动物,AI 不会询问 "has_feathers"。
我不太理解您将如何查询动物是否是 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]).
等等
我正在开发一款关于寻找动物的序幕游戏。用户在 his/her 脑海中保留一只动物,回答游戏中的问题,AI 将尝试找到该动物。
我的问题是关于分离动物 类:
mammal :- verify(gives_milk), !.
bird :- verify(has_feathers), !.
我想把这两个 类 分开。如果动物是哺乳动物,AI 不会询问 "has_feathers"。
我不太理解您将如何查询动物是否是 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]).
等等