Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog自由日代码_Prolog - Fatal编程技术网

Prolog自由日代码

Prolog自由日代码,prolog,Prolog,关于我的任务,我有一个问题。 任务: 人们有自己的日子。在这些日子里,他们可以自由工作 卡尔在周一、周三、周四有空 卢卡斯在周二、周三、周四、周五有空 乔恩在周一、周三、周日有空 亚历克斯在星期四、星期三、星期三和星期日都是免费的 Max在Mo、Wed、Fr、Sa、Su都是免费的 我为这些假设创建了知识库: free(Karl,Mo). free(Karl,Wed). free(Karl,Thu). .. .. free(Max,Su). 提出了4个问题: 第Y天X个人有空吗 什么时

关于我的任务,我有一个问题。 任务:

人们有自己的日子。在这些日子里,他们可以自由工作

卡尔在周一、周三、周四有空

卢卡斯在周二、周三、周四、周五有空

乔恩在周一、周三、周日有空

亚历克斯在星期四、星期三、星期三和星期日都是免费的

Max在Mo、Wed、Fr、Sa、Su都是免费的

我为这些假设创建了知识库:

free(Karl,Mo).

free(Karl,Wed).

free(Karl,Thu).

..

..

free(Max,Su).
提出了4个问题:

  • 第Y天X个人有空吗

  • 什么时候有人在一起自由

  • 哪些人连续2/3/4天有空

  • 他连续三天有空

  • 问题1很简单

    ?- 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,以便在计算第二天时可以使用模