答案 0 :(得分:0)
由于这是一个你必须解释你的工作流程的任务,我不会提供完整的工作代码,而是提供一些想法和指示如何解决这个问题。
<强> MODEL 强>
您将需要一个代表解决方案的模型,以这种方式创建,您可以轻松访问所需的变量。举个例子:
length(MaryJobs,2),
length(JimJobs,2),
length(JohnJobs,2),
Solution = [mary-MaryJobs,jim-JimJobs,john-JohnJobs]
现在我们有3个变量分别代表玛丽,吉姆和约翰的两个职位。
其次,我们需要使用可用的工作事实来与他们合作,所以我们在以下方面做了一些事情:
findall(Job,job(Job),AllJobs),
AllJobs = [Gardener,VetAssistant,DishWasher,Nurse,MathTeacher,BioTutor].
此时我们拥有有关模型的所有必要信息,我们可以编写模型与所有可用作业之间的关系,如下所示:
flatten([MaryJobs,JimJobs,JohnJobs],Jobs),
permutation(Jobs,AllJobs)
请注意,在此行中,Prolog将开始在不同选项之间进行分支。
<强>规则强>
你已经在你的问题中用英语写出了大部分规则,所以真正有的就是把它们翻译成Prolog。我们来看一个例子:
“VetAssistant和护士+玛丽没出去就出去了。”
这隐含地说,正如你所说:“玛丽不能成为护士,也不能成为兽医助理”
所以,只需在代码中:
\+ member(Nurse,MaryJobs),
\+ member(VetAssistant,MaryJobs)
如果你遵循这些思路并将你的每一条英语规则翻译成Prolog代码,你可能最终会得到一些解决方案(就像我自己一样)。为了获得最终结果,还有一个你尚未提及的“隐藏”隐含规则。我可以在这里写下来,但也许你应该先尝试先行,毕竟,这很有趣。
祝你好运!