Prolog编程-关于下一个任务的程序是什么?
关于接下来的三个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进行测试 谢谢你的期待 我将给你
谢谢你的期待 我将给你一些提示:
列表中有一个谓词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)
考虑修改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).