Prolog自由日代码
关于我的任务,我有一个问题。 任务: 人们有自己的日子。在这些日子里,他们可以自由工作 卡尔在周一、周三、周四有空 卢卡斯在周二、周三、周四、周五有空 乔恩在周一、周三、周日有空 亚历克斯在星期四、星期三、星期三和星期日都是免费的 Max在Mo、Wed、Fr、Sa、Su都是免费的 我为这些假设创建了知识库:Prolog自由日代码,prolog,Prolog,关于我的任务,我有一个问题。 任务: 人们有自己的日子。在这些日子里,他们可以自由工作 卡尔在周一、周三、周四有空 卢卡斯在周二、周三、周四、周五有空 乔恩在周一、周三、周日有空 亚历克斯在星期四、星期三、星期三和星期日都是免费的 Max在Mo、Wed、Fr、Sa、Su都是免费的 我为这些假设创建了知识库: free(Karl,Mo). free(Karl,Wed). free(Karl,Thu). .. .. free(Max,Su). 提出了4个问题: 第Y天X个人有空吗 什么时
free(Karl,Mo).
free(Karl,Wed).
free(Karl,Thu).
..
..
free(Max,Su).
提出了4个问题:
?- free(X,Day).
我想不出最后三个
谢谢你的帮助
免费(苏西,1)
免费(苏西,3)
免费(苏西,4)
自由(霍斯特,2)
自由(霍斯特,3)
自由(霍斯特,4)
自由(地垒,5)
免费(拉尔斯,1)
免费(拉尔斯,3)
免费(拉尔斯,6)
免费(汉娜,4岁)
免费(汉娜,5岁)
免费(汉娜,6岁)
免费(fridolin,1)
免费(fridolin,3)
免费(fridolin,5)
免费(fridolin,6)
免费(fridolin,7)
%自由(X,Y)
%一起(X,Y,Z)
一起(人1,人2,何时):-
自由(Person1,When),自由(Person2,When),+(Person1=Person2)
好的,我更新了知识库,并设法完成了第一个和第二个任务
现在卡在第三个问题上://在2-4中,您需要编写一些代码:谓词,用于描述符合条件的逻辑。你试过什么?而且,你现在展示事实的方式也会有问题。在Prolog中,变量以大写字母或
\uu
开头,原子以小写字母开头<代码>自由(Karl,Mo)有两个变量。你可以用单引号(free('Karl',Mo')
)或小写(free(Karl,Mo)
)或混合(free('Karl',Mo)
)。我还建议你将一天的风格从冗长的原子改为整数,这样你就不必定义tue跟在Mo后面,例如,对于第三个和第四个任务,最好的方法是创建一个如下行为的谓词:free_for_days(Person,Count),它找到一个人有空的一天,然后调用free_from_day_for_days(Person,day,Count),它标识他们第二天是否有空,然后递归到free_from_day_for_days(Person,day,Count)(Person,Day+1,Count-1)记住,您需要使用NewCount是Count-1,因为您无法在prolog中执行就地运算。如果您使用伪代码中提供的签名,则“-”将是模式匹配的。您可能还希望在日计数中使用0而不是7,以便在计算第二天时可以使用模