我正在尝试编写一个游戏,其中程序读取数据库,获取属性并询问玩家玩家正在考虑的电影是否具有该属性。用户将回答是或否,如果是,游戏将询问下一个属性,直到用户对每个属性都说是,此时程序将输出电影的名称。或者,如果用户说不,那么游戏将移动到数据库中的下一部电影并开始询问这些属性。
当找到具有所有属性的电影或数据库中没有程序可以询问的电影时,游戏结束。
这是数据库文件。
object_properties(crocodile_dundee,[comedy,australian,paul_hogan_movie]).
object_properties(flipper,[action_movie,australian, paul_hogan_movie,
-comedy]).
object_properties(jackass,[comedy,-australian]).
object_properties(the_godfather,[drama,crime,-character_batman]).
object_properties(the_dark_knight,[drama,crime,character_batman]).
object_properties(the_living_planet, [documentary,director_attenborough]).
object_properties(the_code, [documentary,nerds_love_it]).
object_properties(the_russian_revolution, [documentary,about_history]).
这是我的游戏文件。
go():-
guess_object(0,[]).
guess_object(Obj,[A|As]) :-
object_categories(Obj,A).
guess_object(1).
guess_object(2).
guess_object(3).
guess_object(4).
guess_object(5). %how do i do this specifically for the current Obj attributes?
guess(X) :- guess_object(_, X),
writeln('Does your object have the attribute '(X)'?'),
read(Input), Input=('yes') -> assert(object(X)) ; retractall(X), guess(X).
writeln('I guess that the film is: 'guess_object(Obj,_).
我的主要问题:
guess_object(1)
如何guess_object(5)
根据对象是否具有 2 个属性或 4 个属性等,将对象属性拆分到一个列表中,就像我试图做的那样。如何使我的guess(A) 谓词递归,所以一旦用户说不,它将转到数据库文件中的下一个对象?
我不太擅长序言,但任何建议或指示将不胜感激,即使它只是指出我可能犯的一个愚蠢的错误。我也将尽我所能回答任何人的任何问题。