Prolog编程-关于下一个任务的程序是什么?

Prolog编程-关于下一个任务的程序是什么?,prolog,logic,Prolog,Logic,关于接下来的三个Prolog程序,你能帮我吗? 汇总列表中的元素,并检查是否用3分割? 例如,列表为[1,2,3]-->,元素的总和除以3,因为1+2+3=6,6/3=2-->所以输出应该为真 如果7在列表中,则将其加倍。例如:输入列表-->[1,7,3,7,7],输出应该是[1,7,7,3,7,7,7] 如果7在列表中,则将其更改为2,7,2。例如:输入列表-->[1,7,2,1],输出应该是[1,2,7,2,2,1] 什么是程序以及如何使用SWI Prolog进行测试 谢谢你的期待 我将给你

关于接下来的三个Prolog程序,你能帮我吗?

  • 汇总列表中的元素,并检查是否用3分割? 例如,列表为[1,2,3]-->,元素的总和除以3,因为1+2+3=6,6/3=2-->所以输出应该为真

  • 如果7在列表中,则将其加倍。例如:输入列表-->[1,7,3,7,7],输出应该是[1,7,7,3,7,7,7]

  • 如果7在列表中,则将其更改为2,7,2。例如:输入列表-->[1,7,2,1],输出应该是[1,2,7,2,2,1]

  • 什么是程序以及如何使用SWI Prolog进行测试


    谢谢你的期待

    我将给你一些提示:

  • 你需要a)计算和,b)检查它是否除以3。如果使用SWI Prolog,则库
    列表中有一个谓词
    sum\u list
    ,它执行a)和
    。。。是mod…
    construction to solve b)如果需要使用递归而不是内置谓词来计算和:

    sum([X | Xs],Acc,sum):-Acc1是Acc+X,sum(Xs,Acc1,sum)

    总和([],Acc,Acc)

    sum(List,sum):-sum(List,0,sum)

  • 三,。这些是递归过程。您应该遍历列表,如果遇到7,则问题2应替换为7,7,问题3应替换为2,7,2


  • 考虑修改3的这个片段。

    我建议您考虑一下,自己解决它。也就是说,我会给你一些东西来帮助你开始:

    1) 我假设您的讲师希望看到您执行递归,而不是使用内置的sum_list谓词。看起来是这样的:

    总和([FirstNum | Rest],总和):- 总和(剩余,Sum1), 总和是FirstNum+Sum1


    然后使用“mod”操作符检查整除性。记住在递归到达空集[]时包含一个基本情况。如果你能理解这一点,剩下的事情应该很简单。祝你好运

    这不是domyhomeworkforme.com。如果使用递归,则使用尾部递归更有效(=递归调用是子句正文中的最后一个子目标)。尾部递归实现可以使用累加器完成:
    sum([X | Xs],Acc,sum):-Acc1是Acc+X,sum(Xs,Acc1,sum)。
    sum([],Acc,Acc)。
    sum(List,sum):-sum(List,0,sum)。
    同意。。。但对于初学者来说,这可能不是最简单的概念。计算复杂性与作业问题复杂性:DHi!谢谢你的密码。关于我的第2个和第3个问题:如果我理解得很好,您的代码将等待两个列表(例如:[1,1,7]和[1,1,7,7]),并且输出为true或false(在示例中为true)。但是我需要一个代码,输入是[1,1,7],输出是[1,1,7]!所以只需要一个列表,代码创建另一个。您能帮助我吗?谓词
    遍历列表
    也可以在第二个参数为变量的情况下调用。成功后,变量将与所有7个已复制的列表统一。
    traverse_list([],[]).
    traverse_list([7|Xs], [7,7|Ps]) :-
       !,
       traverse_list(Xs,Ps).
    traverse_list([X|Xs], [X|Ps]) :-
       traverse_list(Xs,Ps).