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



你能帮我介绍接下来的三个Prolog程序吗?

  1. 列表中元素的摘要,并检查是否除以 3?例如,列表是 [1, 2, 3] --> 元素的总和除以 3,因为 1+2+3=6,6/3=2 --> 所以输出应该是 true。

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

  3. ,7,7,3,7,7,7,7]。
  4. 如果列表中有 7,请将其更改为 2,7,2。例如:输入列表 -->[1,7,2,1],输出应为 [1,2,7,2,2,2,1]

该程序是什么以及如何使用SWI-Prolog对其进行测试?

谢谢你的期待!

我会给你几个提示:

  1. 您需要 a) 计算总和,b) 检查它是否除以 3。如果你使用SWI-Prolog,库里有一个谓词sum_list lists它做a)和... 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)。

  2. 和 3.这些是递归过程。您应该遍历列表,如果遇到 7,您应该将其替换为问题 7,7 的问题 2 和 2,7,2 的问题 3。

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)我假设你的导师希望看到你做递归,而不是使用内置的sum_list谓词。那看起来像这样:

总和([第一数字 |其余],总和) :- sum(Rest, Sum1), Sum 是 FirstNum + Sum1。

然后使用"mod"运算符检查可除性。请记住包括递归到达空集 [] 时的基本情况。如果你能理解这一点,剩下的应该很容易。 祝你好运。

最新更新