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

时间:2012-05-26 19:53:16

标签: prolog logic

你可以帮我解决接下来的三个Prolog课程吗?

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

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

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

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

    感谢您的期待!

2 个答案:

答案 0 :(得分:1)

我会给你一些提示:

  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)。

  2. 和3.这些是递归过程。您应该遍历列表,如果遇到7,则应将其替换为问题2的7,7和问题3的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 :(得分:0)

我建议你仔细考虑并自己搞清楚。那就是说,我会给你一些帮助开始的东西:

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

总和([FirstNum | Rest],Sum): -     sum(Rest,Sum1),     Sum是FirstNum + Sum1。

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