【发布时间】:2012-05-12 16:06:48
【问题描述】:
我正在使用 Prolog 开发一个Guess Who? 游戏。游戏的机制非常简单。一个玩家(在这种情况下是人类)从许多可能的人中选择一个人,而另一个玩家(计算机)开始就该人的某些属性提出是/否问题。最终,根据给定的答案,将只有一个可能的人。
到目前为止,我已经能够制定一套规则和谓词,以便计算机可以根据迄今为止提出的问题来猜测这个人。我有一组嫌疑人——这些人在现有线索的情况下可能适合。
suspect('Person 1') :- eyes(blue) , age(old) , gender(male).
属性的谓词被定义为,如果关于该属性的问题尚未被提出,或者如果问题已被提出并且答案与嫌疑人的属性相匹配,则它们将为真。
gender(X) :- not(asked_gender) ; value_of(gender, X).
这样,如果两个嫌疑人的眼睛、年龄相同、性别不同,只要不问性别,他们都是合理的嫌疑人。
但是,现在最困难的部分是自动化提出这些问题的过程。基本上,我期待 Prolog 能够从嫌疑人的谓词中获取属性的可能值的解决方案,而不是在其他地方列出主题。我很确定一定有办法做到这一点,因为 prolog 能够将程序的代码用作数据本身。
我怎么能这样做?
【问题讨论】:
标签: prolog