你可以帮我解决接下来的三个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]。
如果7在列表中,请将其更改为2,7,2。 例如:输入列表 - > [1,7,2,1],输出应为[1,2,7,2,2,1]
该程序是什么以及如何使用SWI-Prolog进行测试?
感谢您的期待!
答案 0 :(得分:1)
我会给你一些提示:
您需要a)计算总和,b)检查它是否除以3.如果使用SWI-Prolog,库sum_list
中有一个谓词lists
)和要解决的... is ... mod ...
构造b)如果需要使用递归而不是内置谓词来计算总和:
sum([X | Xs],Acc,Sum): - Acc1是Acc + X,sum(Xs,Acc1,Sum)。
sum([],Acc,Acc)。
sum(List,Sum): - sum(List,0,Sum)。
和3.这些是递归过程。您应该遍历列表,如果遇到7,则应将其替换为问题2的7,7和问题3的2,7,2。
traverse_list([],[]). traverse_list([7|Xs], [7,7|Ps]) :- !, traverse_list(Xs,Ps). traverse_list([X|Xs], [X|Ps]) :- traverse_list(Xs,Ps).
考虑将此片段修改为3。
答案 1 :(得分:0)
我建议你仔细考虑并自己搞清楚。那就是说,我会给你一些帮助开始的东西:
1)我假设您的教师希望看到您进行递归而不是使用内置的sum_list谓词。这看起来像这样:
总和([FirstNum | Rest],Sum): - sum(Rest,Sum1), Sum是FirstNum + Sum1。
然后使用“mod”运算符检查可分性。请记住包含递归到达空集[]时的基本情况。如果你能理解这一点,其余的应该很容易。祝好运。